pull/1469/head
			
			
		
		
							parent
							
								
									5832bab02f
								
							
						
					
					
						commit
						0899deaae3
					
				@ -0,0 +1,235 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					             LUFA Library
 | 
				
			||||||
 | 
					     Copyright (C) Dean Camera, 2009.
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
 | 
					  dean [at] fourwalledcubicle [dot] com
 | 
				
			||||||
 | 
					      www.fourwalledcubicle.com
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Permission to use, copy, modify, and distribute this software
 | 
				
			||||||
 | 
					  and its documentation for any purpose and without fee is hereby
 | 
				
			||||||
 | 
					  granted, provided that the above copyright notice appear in all
 | 
				
			||||||
 | 
					  copies and that both that the copyright notice and this
 | 
				
			||||||
 | 
					  permission notice and warranty disclaimer appear in supporting
 | 
				
			||||||
 | 
					  documentation, and that the name of the author not be used in
 | 
				
			||||||
 | 
					  advertising or publicity pertaining to distribution of the
 | 
				
			||||||
 | 
					  software without specific, written prior permission.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The author disclaim all warranties with regard to this
 | 
				
			||||||
 | 
					  software, including all implied warranties of merchantability
 | 
				
			||||||
 | 
					  and fitness.  In no event shall the author be liable for any
 | 
				
			||||||
 | 
					  special, indirect or consequential damages or any damages
 | 
				
			||||||
 | 
					  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||||
 | 
					  in an action of contract, negligence or other tortious action,
 | 
				
			||||||
 | 
					  arising out of or in connection with the use or performance of
 | 
				
			||||||
 | 
					  this software.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** \file
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  Main source file for the CDCMouse demo. This file contains the main tasks of
 | 
				
			||||||
 | 
					 *  the demo and is responsible for the initial application hardware configuration.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					#include "CDCMouse.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** LUFA CDC Class driver interface configuration and state information. This structure is
 | 
				
			||||||
 | 
					 *  passed to all CDC Class driver functions, so that multiple instances of the same class
 | 
				
			||||||
 | 
					 *  within a device can be differentiated from one another.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							.Config =
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									.ControlInterfaceNumber     = 0,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									.DataINEndpointNumber       = CDC_TX_EPNUM,
 | 
				
			||||||
 | 
									.DataINEndpointSize         = CDC_TXRX_EPSIZE,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									.DataOUTEndpointNumber      = CDC_RX_EPNUM,
 | 
				
			||||||
 | 
									.DataOUTEndpointSize        = CDC_TXRX_EPSIZE,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									.NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,
 | 
				
			||||||
 | 
									.NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Buffer to hold the previously generated Mouse HID report, for comparison purposes inside the HID class driver. */
 | 
				
			||||||
 | 
					uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** LUFA HID Class driver interface configuration and state information. This structure is
 | 
				
			||||||
 | 
					 *  passed to all HID Class driver functions, so that multiple instances of the same class
 | 
				
			||||||
 | 
					 *  within a device can be differentiated from one another.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					USB_ClassInfo_HID_Device_t Mouse_HID_Interface =
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							.Config =
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									.InterfaceNumber         = 0,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									.ReportINEndpointNumber  = MOUSE_EPNUM,
 | 
				
			||||||
 | 
									.ReportINEndpointSize    = MOUSE_EPSIZE,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									.PrevReportINBuffer      = PrevMouseHIDReportBuffer,
 | 
				
			||||||
 | 
									.PrevReportINBufferSize  = sizeof(PrevMouseHIDReportBuffer),
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Main program entry point. This routine contains the overall program flow, including initial
 | 
				
			||||||
 | 
					 *  setup of all components and the main program loop.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					int main(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						SetupHardware();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (;;)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							CheckJoystickMovement();
 | 
				
			||||||
 | 
							 
 | 
				
			||||||
 | 
							/* Must throw away unused bytes from the host, or it will lock up while waiting for the device */
 | 
				
			||||||
 | 
							while (CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface))
 | 
				
			||||||
 | 
							  CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
 | 
				
			||||||
 | 
							HID_Device_USBTask(&Mouse_HID_Interface);
 | 
				
			||||||
 | 
							USB_USBTask();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Configures the board hardware and chip peripherals for the demo's functionality. */
 | 
				
			||||||
 | 
					void SetupHardware(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						/* Disable watchdog if enabled by bootloader/fuses */
 | 
				
			||||||
 | 
						MCUSR &= ~(1 << WDRF);
 | 
				
			||||||
 | 
						wdt_disable();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Disable clock division */
 | 
				
			||||||
 | 
						clock_prescale_set(clock_div_1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Hardware Initialization */
 | 
				
			||||||
 | 
						Joystick_Init();
 | 
				
			||||||
 | 
						LEDs_Init();
 | 
				
			||||||
 | 
						USB_Init();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Checks for changes in the position of the board joystick, sending strings to the host upon each change. */
 | 
				
			||||||
 | 
					void CheckJoystickMovement(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						uint8_t     JoyStatus_LCL = Joystick_GetStatus();
 | 
				
			||||||
 | 
						char*       ReportString  = NULL;
 | 
				
			||||||
 | 
						static bool ActionSent    = false;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if (JoyStatus_LCL & JOY_UP)
 | 
				
			||||||
 | 
						  ReportString = "Joystick Up\r\n";
 | 
				
			||||||
 | 
						else if (JoyStatus_LCL & JOY_DOWN)
 | 
				
			||||||
 | 
						  ReportString = "Joystick Down\r\n";
 | 
				
			||||||
 | 
						else if (JoyStatus_LCL & JOY_LEFT)
 | 
				
			||||||
 | 
						  ReportString = "Joystick Left\r\n";
 | 
				
			||||||
 | 
						else if (JoyStatus_LCL & JOY_RIGHT)
 | 
				
			||||||
 | 
						  ReportString = "Joystick Right\r\n";
 | 
				
			||||||
 | 
						else if (JoyStatus_LCL & JOY_PRESS)
 | 
				
			||||||
 | 
						  ReportString = "Joystick Pressed\r\n";
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						  ActionSent = false;
 | 
				
			||||||
 | 
						  
 | 
				
			||||||
 | 
						if ((ReportString != NULL) && (ActionSent == false))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							ActionSent = true;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							CDC_Device_SendString(&VirtualSerial_CDC_Interface, ReportString, strlen(ReportString));		
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Event handler for the library USB Connection event. */
 | 
				
			||||||
 | 
					void EVENT_USB_Device_Connect(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Event handler for the library USB Disconnection event. */
 | 
				
			||||||
 | 
					void EVENT_USB_Device_Disconnect(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Event handler for the library USB Configuration Changed event. */
 | 
				
			||||||
 | 
					void EVENT_USB_Device_ConfigurationChanged(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						LEDs_SetAllLEDs(LEDMASK_USB_READY);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!(CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface)))
 | 
				
			||||||
 | 
						  LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!(HID_Device_ConfigureEndpoints(&Mouse_HID_Interface)))
 | 
				
			||||||
 | 
						  LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
 | 
				
			||||||
 | 
						  
 | 
				
			||||||
 | 
						USB_Device_EnableSOFEvents();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Event handler for the library USB Unhandled Control Request event. */
 | 
				
			||||||
 | 
					void EVENT_USB_Device_UnhandledControlRequest(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
 | 
				
			||||||
 | 
						HID_Device_ProcessControlRequest(&Mouse_HID_Interface);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Event handler for the USB device Start Of Frame event. */
 | 
				
			||||||
 | 
					void EVENT_USB_Device_StartOfFrame(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						HID_Device_MillisecondElapsed(&Mouse_HID_Interface);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** HID class driver callback function for the creation of HID reports to the host.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
				
			||||||
 | 
					 *  \param[in,out] ReportID  Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
 | 
				
			||||||
 | 
					 *  \param[out] ReportData  Pointer to a buffer where the created report should be stored
 | 
				
			||||||
 | 
					 *  \param[out] ReportSize  Number of bytes written in the report (or zero if no report is to be sent
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
 | 
				
			||||||
 | 
					                                         void* ReportData, uint16_t* ReportSize)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						uint8_t JoyStatus_LCL    = Joystick_GetStatus();
 | 
				
			||||||
 | 
						uint8_t ButtonStatus_LCL = Buttons_GetStatus();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (JoyStatus_LCL & JOY_UP)
 | 
				
			||||||
 | 
						  MouseReport->Y = -1;
 | 
				
			||||||
 | 
						else if (JoyStatus_LCL & JOY_DOWN)
 | 
				
			||||||
 | 
						  MouseReport->Y =  1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (JoyStatus_LCL & JOY_RIGHT)
 | 
				
			||||||
 | 
						  MouseReport->X =  1;
 | 
				
			||||||
 | 
						else if (JoyStatus_LCL & JOY_LEFT)
 | 
				
			||||||
 | 
						  MouseReport->X = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (JoyStatus_LCL & JOY_PRESS)
 | 
				
			||||||
 | 
						  MouseReport->Button  = (1 << 0);
 | 
				
			||||||
 | 
						  
 | 
				
			||||||
 | 
						if (ButtonStatus_LCL & BUTTONS_BUTTON1)
 | 
				
			||||||
 | 
						  MouseReport->Button |= (1 << 1);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						*ReportSize = sizeof(USB_MouseReport_Data_t);
 | 
				
			||||||
 | 
						return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** HID class driver callback function for the processing of HID reports from the host.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
 | 
				
			||||||
 | 
					 *  \param[in] ReportID  Report ID of the received report from the host
 | 
				
			||||||
 | 
					 *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
 | 
				
			||||||
 | 
					 *  \param[in] ReportSize  Size in bytes of the received HID report
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
 | 
				
			||||||
 | 
					                                          const void* ReportData, const uint16_t ReportSize)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						// Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,82 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					             LUFA Library
 | 
				
			||||||
 | 
					     Copyright (C) Dean Camera, 2009.
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
 | 
					  dean [at] fourwalledcubicle [dot] com
 | 
				
			||||||
 | 
					      www.fourwalledcubicle.com
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Permission to use, copy, modify, and distribute this software
 | 
				
			||||||
 | 
					  and its documentation for any purpose and without fee is hereby
 | 
				
			||||||
 | 
					  granted, provided that the above copyright notice appear in all
 | 
				
			||||||
 | 
					  copies and that both that the copyright notice and this
 | 
				
			||||||
 | 
					  permission notice and warranty disclaimer appear in supporting
 | 
				
			||||||
 | 
					  documentation, and that the name of the author not be used in
 | 
				
			||||||
 | 
					  advertising or publicity pertaining to distribution of the
 | 
				
			||||||
 | 
					  software without specific, written prior permission.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The author disclaim all warranties with regard to this
 | 
				
			||||||
 | 
					  software, including all implied warranties of merchantability
 | 
				
			||||||
 | 
					  and fitness.  In no event shall the author be liable for any
 | 
				
			||||||
 | 
					  special, indirect or consequential damages or any damages
 | 
				
			||||||
 | 
					  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||||
 | 
					  in an action of contract, negligence or other tortious action,
 | 
				
			||||||
 | 
					  arising out of or in connection with the use or performance of
 | 
				
			||||||
 | 
					  this software.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** \file
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  Header file for CDCMouse.c.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef _CDC_MOUSE_H_
 | 
				
			||||||
 | 
					#define _CDC_MOUSE_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Includes: */
 | 
				
			||||||
 | 
							#include <avr/io.h>
 | 
				
			||||||
 | 
							#include <avr/wdt.h>
 | 
				
			||||||
 | 
							#include <avr/power.h>
 | 
				
			||||||
 | 
							#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							#include "Descriptors.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							#include <LUFA/Version.h>
 | 
				
			||||||
 | 
							#include <LUFA/Drivers/Board/LEDs.h>
 | 
				
			||||||
 | 
							#include <LUFA/Drivers/Board/Joystick.h>
 | 
				
			||||||
 | 
							#include <LUFA/Drivers/Board/Buttons.h>
 | 
				
			||||||
 | 
							#include <LUFA/Drivers/USB/USB.h>
 | 
				
			||||||
 | 
							#include <LUFA/Drivers/USB/Class/CDC.h>
 | 
				
			||||||
 | 
							#include <LUFA/Drivers/USB/Class/HID.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Macros: */
 | 
				
			||||||
 | 
							/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
 | 
				
			||||||
 | 
							#define LEDMASK_USB_NOTREADY      LEDS_LED1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
 | 
				
			||||||
 | 
							#define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
 | 
				
			||||||
 | 
							#define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
 | 
				
			||||||
 | 
							#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						/* Function Prototypes: */
 | 
				
			||||||
 | 
							void SetupHardware(void);
 | 
				
			||||||
 | 
							void CheckJoystickMovement(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							void EVENT_USB_Device_Connect(void);
 | 
				
			||||||
 | 
							void EVENT_USB_Device_Disconnect(void);
 | 
				
			||||||
 | 
							void EVENT_USB_Device_ConfigurationChanged(void);
 | 
				
			||||||
 | 
							void EVENT_USB_Device_UnhandledControlRequest(void);
 | 
				
			||||||
 | 
							void EVENT_USB_Device_StartOfFrame(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
 | 
				
			||||||
 | 
					                                                 void* ReportData, uint16_t* ReportSize);
 | 
				
			||||||
 | 
							void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
 | 
				
			||||||
 | 
							                                          const void* ReportData, const uint16_t ReportSize);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@ -0,0 +1,75 @@
 | 
				
			|||||||
 | 
					/** \file
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
				
			||||||
 | 
					 *  documentation pages. It is not a project source file.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					/** \mainpage Combined Communications Device Class (Virtual Serial Port) and Mouse Demo
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  \section SSec_Compat Demo Compatibility:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  The following list indicates what microcontrollers are compatible with this demo.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  - Series 7 USB AVRs
 | 
				
			||||||
 | 
					 *  - Series 6 USB AVRs
 | 
				
			||||||
 | 
					 *  - Series 4 USB AVRs
 | 
				
			||||||
 | 
					 *  - Series 2 USB AVRs
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  \section SSec_Info USB Information:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  The following table gives a rundown of the USB utilization of this demo.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  <table>
 | 
				
			||||||
 | 
					 *   <tr>
 | 
				
			||||||
 | 
					 *    <td><b>USB Mode:</b></td>
 | 
				
			||||||
 | 
					 *    <td>Device</td>
 | 
				
			||||||
 | 
					 *   </tr>
 | 
				
			||||||
 | 
					 *   <tr>
 | 
				
			||||||
 | 
					 *    <td><b>USB Class:</b></td>
 | 
				
			||||||
 | 
					 *    <td>Communications Device Class (CDC)</td>
 | 
				
			||||||
 | 
					 *    <td>Human Interface Device Class (HID)</td>
 | 
				
			||||||
 | 
					 *   </tr>
 | 
				
			||||||
 | 
					 *   <tr> 
 | 
				
			||||||
 | 
					 *    <td><b>USB Subclass:</b></td>
 | 
				
			||||||
 | 
					 *    <td>Abstract Control Model (ACM)</td>
 | 
				
			||||||
 | 
					 *    <td>Mouse Subclass</td>
 | 
				
			||||||
 | 
					 *   </tr>
 | 
				
			||||||
 | 
					 *   <tr>
 | 
				
			||||||
 | 
					 *    <td><b>Relevant Standards:</b></td>
 | 
				
			||||||
 | 
					 *    <td>USBIF CDC Class Standard</td>
 | 
				
			||||||
 | 
					 *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>
 | 
				
			||||||
 | 
					 *   </tr>
 | 
				
			||||||
 | 
					 *   <tr>
 | 
				
			||||||
 | 
					 *    <td><b>Usable Speeds:</b></td>
 | 
				
			||||||
 | 
					 *    <td>Full Speed Mode</td>
 | 
				
			||||||
 | 
					 *   </tr>
 | 
				
			||||||
 | 
					 *  </table>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  \section SSec_Description Project Description: 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  Combined Communications Device Class/Mouse demonstration application.
 | 
				
			||||||
 | 
					 *  This gives a simple reference application for implementing a combined
 | 
				
			||||||
 | 
					 *  CDC and HID device acting as a both a virtual serial port and a mouse.
 | 
				
			||||||
 | 
					 *  Joystick actions are transmitted to the host as strings and as mouse
 | 
				
			||||||
 | 
					 *  movements. The device does not respond to serial data sent from the host.
 | 
				
			||||||
 | 
					 *  
 | 
				
			||||||
 | 
					 *  After running this demo for the first time on a new computer,
 | 
				
			||||||
 | 
					 *  you will need to supply the .INF file located in this demo
 | 
				
			||||||
 | 
					 *  project's directory as the device's driver when running under
 | 
				
			||||||
 | 
					 *  Windows. This will enable Windows to use its inbuilt CDC drivers,
 | 
				
			||||||
 | 
					 *  negating the need for custom drivers for the device. Other
 | 
				
			||||||
 | 
					 *  Operating Systems should automatically use their own inbuilt
 | 
				
			||||||
 | 
					 *  CDC-ACM drivers.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  \section SSec_Options Project Options
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  <table>
 | 
				
			||||||
 | 
					 *   <tr>
 | 
				
			||||||
 | 
					 *    <td>
 | 
				
			||||||
 | 
					 *     None
 | 
				
			||||||
 | 
					 *    </td>
 | 
				
			||||||
 | 
					 *   </tr>
 | 
				
			||||||
 | 
					 *  </table>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
@ -0,0 +1,370 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					             LUFA Library
 | 
				
			||||||
 | 
					     Copyright (C) Dean Camera, 2009.
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
 | 
					  dean [at] fourwalledcubicle [dot] com
 | 
				
			||||||
 | 
					      www.fourwalledcubicle.com
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Permission to use, copy, modify, and distribute this software
 | 
				
			||||||
 | 
					  and its documentation for any purpose and without fee is hereby
 | 
				
			||||||
 | 
					  granted, provided that the above copyright notice appear in all
 | 
				
			||||||
 | 
					  copies and that both that the copyright notice and this
 | 
				
			||||||
 | 
					  permission notice and warranty disclaimer appear in supporting
 | 
				
			||||||
 | 
					  documentation, and that the name of the author not be used in
 | 
				
			||||||
 | 
					  advertising or publicity pertaining to distribution of the
 | 
				
			||||||
 | 
					  software without specific, written prior permission.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The author disclaim all warranties with regard to this
 | 
				
			||||||
 | 
					  software, including all implied warranties of merchantability
 | 
				
			||||||
 | 
					  and fitness.  In no event shall the author be liable for any
 | 
				
			||||||
 | 
					  special, indirect or consequential damages or any damages
 | 
				
			||||||
 | 
					  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||||
 | 
					  in an action of contract, negligence or other tortious action,
 | 
				
			||||||
 | 
					  arising out of or in connection with the use or performance of
 | 
				
			||||||
 | 
					  this software.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** \file
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
				
			||||||
 | 
					 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
				
			||||||
 | 
					 *  the device's capabilities and functions.  
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "Descriptors.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* On some devices, there is a factory set internal serial number which can be automatically sent to the host as
 | 
				
			||||||
 | 
					 * the device's serial number when the Device Descriptor's .SerialNumStrIndex entry is set to USE_INTERNAL_SERIAL.
 | 
				
			||||||
 | 
					 * This allows the host to track a device across insertions on different ports, allowing them to retain allocated
 | 
				
			||||||
 | 
					 * resources like COM port numbers and drivers. On demos using this feature, give a warning on unsupported devices
 | 
				
			||||||
 | 
					 * so that the user can supply their own serial number descriptor instead or remove the USE_INTERNAL_SERIAL value
 | 
				
			||||||
 | 
					 * from the Device Descriptor (forcing the host to generate a serial number for each device from the VID, PID and
 | 
				
			||||||
 | 
					 * port location).
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)
 | 
				
			||||||
 | 
						#warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** HID class report descriptor. This is a special descriptor constructed with values from the
 | 
				
			||||||
 | 
					 *  USBIF HID class specification to describe the reports and capabilities of the HID device. This
 | 
				
			||||||
 | 
					 *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)
 | 
				
			||||||
 | 
					 *  the device will send, and what it may be sent back from the host. Refer to the HID specification for
 | 
				
			||||||
 | 
					 *  more details on HID report descriptors.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						0x05, 0x01,          /* Usage Page (Generic Desktop)             */
 | 
				
			||||||
 | 
						0x09, 0x02,          /* Usage (Mouse)                            */
 | 
				
			||||||
 | 
						0xA1, 0x01,          /* Collection (Application)                 */
 | 
				
			||||||
 | 
						0x09, 0x01,          /*   Usage (Pointer)                        */
 | 
				
			||||||
 | 
						0xA1, 0x00,          /*   Collection (Application)               */
 | 
				
			||||||
 | 
						0x95, 0x03,          /*     Report Count (3)                     */
 | 
				
			||||||
 | 
						0x75, 0x01,          /*     Report Size (1)                      */
 | 
				
			||||||
 | 
						0x05, 0x09,          /*     Usage Page (Button)                  */
 | 
				
			||||||
 | 
						0x19, 0x01,          /*     Usage Minimum (Button 1)             */
 | 
				
			||||||
 | 
						0x29, 0x03,          /*     Usage Maximum (Button 3)             */
 | 
				
			||||||
 | 
						0x15, 0x00,          /*     Logical Minimum (0)                  */
 | 
				
			||||||
 | 
						0x25, 0x01,          /*     Logical Maximum (1)                  */
 | 
				
			||||||
 | 
						0x81, 0x02,          /*     Input (Data, Variable, Absolute)     */
 | 
				
			||||||
 | 
						0x95, 0x01,          /*     Report Count (1)                     */
 | 
				
			||||||
 | 
						0x75, 0x05,          /*     Report Size (5)                      */
 | 
				
			||||||
 | 
						0x81, 0x01,          /*     Input (Constant)                     */
 | 
				
			||||||
 | 
						0x75, 0x08,          /*     Report Size (8)                      */
 | 
				
			||||||
 | 
						0x95, 0x02,          /*     Report Count (2)                     */
 | 
				
			||||||
 | 
						0x05, 0x01,          /*     Usage Page (Generic Desktop Control) */
 | 
				
			||||||
 | 
						0x09, 0x30,          /*     Usage X                              */
 | 
				
			||||||
 | 
						0x09, 0x31,          /*     Usage Y                              */
 | 
				
			||||||
 | 
						0x15, 0x81,          /*     Logical Minimum (-127)               */
 | 
				
			||||||
 | 
						0x25, 0x7F,          /*     Logical Maximum (127)                */
 | 
				
			||||||
 | 
						0x81, 0x06,          /*     Input (Data, Variable, Relative)     */
 | 
				
			||||||
 | 
						0xC0,                /*   End Collection                         */
 | 
				
			||||||
 | 
						0xC0                 /* End Collection                           */
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
 | 
				
			||||||
 | 
					 *  device characteristics, including the supported USB version, control endpoint size and the
 | 
				
			||||||
 | 
					 *  number of device configurations. The descriptor is read out by the USB host when the enumeration
 | 
				
			||||||
 | 
					 *  process begins.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						.USBSpecification       = VERSION_BCD(01.10),
 | 
				
			||||||
 | 
						.Class                  = 0xEF,
 | 
				
			||||||
 | 
						.SubClass               = 0x02,
 | 
				
			||||||
 | 
						.Protocol               = 0x01,
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						.VendorID               = 0x03EB,
 | 
				
			||||||
 | 
						.ProductID              = 0x2062,
 | 
				
			||||||
 | 
						.ReleaseNumber          = 0x0000,
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						.ManufacturerStrIndex   = 0x01,
 | 
				
			||||||
 | 
						.ProductStrIndex        = 0x02,
 | 
				
			||||||
 | 
						.SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
 | 
				
			||||||
 | 
					 *  of the device in one of its supported configurations, including information about any device interfaces
 | 
				
			||||||
 | 
					 *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
 | 
				
			||||||
 | 
					 *  a configuration so that the host may correctly communicate with the USB device.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						.Config = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
 | 
				
			||||||
 | 
								.TotalInterfaces        = 3,
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.ConfigurationNumber    = 1,
 | 
				
			||||||
 | 
								.ConfigurationStrIndex  = NO_DESCRIPTOR,
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.CDC_IAD = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								.FirstInterfaceIndex    = 0,
 | 
				
			||||||
 | 
								.TotalInterfaces        = 2,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								.Class                  = 0x02,
 | 
				
			||||||
 | 
								.SubClass               = 0x02,
 | 
				
			||||||
 | 
								.Protocol               = 0x01,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								.IADStrIndex            = NO_DESCRIPTOR
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						.CCI_Interface = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								.InterfaceNumber        = 0,
 | 
				
			||||||
 | 
								.AlternateSetting       = 0,
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.TotalEndpoints         = 1,
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.Class                  = 0x02,
 | 
				
			||||||
 | 
								.SubClass               = 0x02,
 | 
				
			||||||
 | 
								.Protocol               = 0x01,
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.CDC_Functional_IntHeader = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},
 | 
				
			||||||
 | 
								.SubType                = 0x00,
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.Data                   = {0x01, 0x10}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.CDC_Functional_CallManagement = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},
 | 
				
			||||||
 | 
								.SubType                = 0x01,
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.Data                   = {0x03, 0x01}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.CDC_Functional_AbstractControlManagement = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},
 | 
				
			||||||
 | 
								.SubType                = 0x02,
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.Data                   = {0x06}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						.CDC_Functional_Union = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},
 | 
				
			||||||
 | 
								.SubType                = 0x06,
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.Data                   = {0x00, 0x01}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.ManagementEndpoint = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),
 | 
				
			||||||
 | 
								.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
				
			||||||
 | 
								.EndpointSize           = CDC_NOTIFICATION_EPSIZE,
 | 
				
			||||||
 | 
								.PollingIntervalMS      = 0xFF
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.DCI_Interface = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								.InterfaceNumber        = 1,
 | 
				
			||||||
 | 
								.AlternateSetting       = 0,
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.TotalEndpoints         = 2,
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
								.Class                  = 0x0A,
 | 
				
			||||||
 | 
								.SubClass               = 0x00,
 | 
				
			||||||
 | 
								.Protocol               = 0x00,
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
								.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.DataOutEndpoint = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),
 | 
				
			||||||
 | 
								.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
				
			||||||
 | 
								.EndpointSize           = CDC_TXRX_EPSIZE,
 | 
				
			||||||
 | 
								.PollingIntervalMS      = 0x00
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						.DataInEndpoint = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),
 | 
				
			||||||
 | 
								.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
				
			||||||
 | 
								.EndpointSize           = CDC_TXRX_EPSIZE,
 | 
				
			||||||
 | 
								.PollingIntervalMS      = 0x00
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.InterfaceHID = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								.InterfaceNumber        = 3,
 | 
				
			||||||
 | 
								.AlternateSetting       = 0,
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.TotalEndpoints         = 1,
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
								.Class                  = 0x03,
 | 
				
			||||||
 | 
								.SubClass               = 0x01,
 | 
				
			||||||
 | 
								.Protocol               = HID_BOOT_MOUSE_PROTOCOL,
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
								.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.MouseHID = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(USB_HID_Descriptor_t), .Type = DTYPE_HID},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								.HIDSpec                = VERSION_BCD(01.11),
 | 
				
			||||||
 | 
								.CountryCode            = 0x00,
 | 
				
			||||||
 | 
								.TotalReportDescriptors = 1,
 | 
				
			||||||
 | 
								.HIDReportType          = DTYPE_Report,
 | 
				
			||||||
 | 
								.HIDReportLength        = sizeof(MouseReport)
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.MouseEndpoint = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_EPNUM),
 | 
				
			||||||
 | 
								.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
				
			||||||
 | 
								.EndpointSize           = MOUSE_EPSIZE,
 | 
				
			||||||
 | 
								.PollingIntervalMS      = 0x0A
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
 | 
				
			||||||
 | 
					 *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
 | 
				
			||||||
 | 
					 *  via the language ID table available at USB.org what languages the device supports for its string descriptors.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					USB_Descriptor_String_t PROGMEM LanguageString =
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.UnicodeString          = {LANGUAGE_ID_ENG}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
 | 
				
			||||||
 | 
					 *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
 | 
				
			||||||
 | 
					 *  Descriptor.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.UnicodeString          = L"Dean Camera"
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
 | 
				
			||||||
 | 
					 *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
 | 
				
			||||||
 | 
					 *  Descriptor.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					USB_Descriptor_String_t PROGMEM ProductString =
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						.Header                 = {.Size = USB_STRING_LEN(23), .Type = DTYPE_String},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.UnicodeString          = L"LUFA CDC and Mouse Demo"
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
 | 
				
			||||||
 | 
					 *  documentation) by the application code so that the address and size of a requested descriptor can be given
 | 
				
			||||||
 | 
					 *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
 | 
				
			||||||
 | 
					 *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
 | 
				
			||||||
 | 
					 *  USB host.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						const uint8_t  DescriptorType   = (wValue >> 8);
 | 
				
			||||||
 | 
						const uint8_t  DescriptorNumber = (wValue & 0xFF);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void*          Address = NULL;
 | 
				
			||||||
 | 
						uint16_t       Size    = NO_DESCRIPTOR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch (DescriptorType)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							case DTYPE_Device:
 | 
				
			||||||
 | 
								Address = (void*)&DeviceDescriptor;
 | 
				
			||||||
 | 
								Size    = sizeof(USB_Descriptor_Device_t);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case DTYPE_Configuration: 
 | 
				
			||||||
 | 
								Address = (void*)&ConfigurationDescriptor;
 | 
				
			||||||
 | 
								Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case DTYPE_String: 
 | 
				
			||||||
 | 
								switch (DescriptorNumber)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									case 0x00: 
 | 
				
			||||||
 | 
										Address = (void*)&LanguageString;
 | 
				
			||||||
 | 
										Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 0x01: 
 | 
				
			||||||
 | 
										Address = (void*)&ManufacturerString;
 | 
				
			||||||
 | 
										Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 0x02: 
 | 
				
			||||||
 | 
										Address = (void*)&ProductString;
 | 
				
			||||||
 | 
										Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case DTYPE_HID: 
 | 
				
			||||||
 | 
								Address = (void*)&ConfigurationDescriptor.MouseHID;
 | 
				
			||||||
 | 
								Size    = sizeof(USB_HID_Descriptor_t);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case DTYPE_Report: 
 | 
				
			||||||
 | 
								Address = (void*)&MouseReport;
 | 
				
			||||||
 | 
								Size    = sizeof(MouseReport);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						*DescriptorAddress = Address;
 | 
				
			||||||
 | 
						return Size;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,95 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					             LUFA Library
 | 
				
			||||||
 | 
					     Copyright (C) Dean Camera, 2009.
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
 | 
					  dean [at] fourwalledcubicle [dot] com
 | 
				
			||||||
 | 
					      www.fourwalledcubicle.com
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Permission to use, copy, modify, and distribute this software
 | 
				
			||||||
 | 
					  and its documentation for any purpose and without fee is hereby
 | 
				
			||||||
 | 
					  granted, provided that the above copyright notice appear in all
 | 
				
			||||||
 | 
					  copies and that both that the copyright notice and this
 | 
				
			||||||
 | 
					  permission notice and warranty disclaimer appear in supporting
 | 
				
			||||||
 | 
					  documentation, and that the name of the author not be used in
 | 
				
			||||||
 | 
					  advertising or publicity pertaining to distribution of the
 | 
				
			||||||
 | 
					  software without specific, written prior permission.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The author disclaim all warranties with regard to this
 | 
				
			||||||
 | 
					  software, including all implied warranties of merchantability
 | 
				
			||||||
 | 
					  and fitness.  In no event shall the author be liable for any
 | 
				
			||||||
 | 
					  special, indirect or consequential damages or any damages
 | 
				
			||||||
 | 
					  whatsoever resulting from loss of use, data or profits, whether
 | 
				
			||||||
 | 
					  in an action of contract, negligence or other tortious action,
 | 
				
			||||||
 | 
					  arising out of or in connection with the use or performance of
 | 
				
			||||||
 | 
					  this software.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** \file
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  Header file for Descriptors.c.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					#ifndef _DESCRIPTORS_H_
 | 
				
			||||||
 | 
					#define _DESCRIPTORS_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Includes: */
 | 
				
			||||||
 | 
							#include <avr/pgmspace.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							#include <LUFA/Drivers/USB/USB.h>
 | 
				
			||||||
 | 
							#include <LUFA/Drivers/USB/Class/CDC.h>
 | 
				
			||||||
 | 
							#include <LUFA/Drivers/USB/Class/HID.h>
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						/* Macros: */
 | 
				
			||||||
 | 
							/** Endpoint number of the CDC device-to-host notification IN endpoint. */
 | 
				
			||||||
 | 
							#define CDC_NOTIFICATION_EPNUM         2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/** Endpoint number of the CDC device-to-host data IN endpoint. */
 | 
				
			||||||
 | 
							#define CDC_TX_EPNUM                   3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/** Endpoint number of the CDC host-to-device data OUT endpoint. */
 | 
				
			||||||
 | 
							#define CDC_RX_EPNUM                   4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/** Size in bytes of the CDC device-to-host notification IN endpoint. */
 | 
				
			||||||
 | 
							#define CDC_NOTIFICATION_EPSIZE        8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/** Size in bytes of the CDC data IN and OUT endpoints. */
 | 
				
			||||||
 | 
							#define CDC_TXRX_EPSIZE                16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/** Endpoint number of the Mouse HID reporting IN endpoint. */
 | 
				
			||||||
 | 
							#define MOUSE_EPNUM                    1
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/** Size in bytes of the Mouse HID reporting IN endpoint. */
 | 
				
			||||||
 | 
							#define MOUSE_EPSIZE                   8
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						/* Type Defines: */
 | 
				
			||||||
 | 
							/** Type define for the device configuration descriptor structure. This must be defined in the
 | 
				
			||||||
 | 
							 *  application code, as the configuration descriptor contains several sub-descriptors which
 | 
				
			||||||
 | 
							 *  vary between devices, and which describe the device's usage to the host.
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							typedef struct
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								USB_Descriptor_Configuration_Header_t    Config;
 | 
				
			||||||
 | 
								USB_Descriptor_Interface_Association_t   CDC_IAD;
 | 
				
			||||||
 | 
								USB_Descriptor_Interface_t               CCI_Interface;
 | 
				
			||||||
 | 
								CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_IntHeader;
 | 
				
			||||||
 | 
								CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_CallManagement;
 | 
				
			||||||
 | 
								CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC_Functional_AbstractControlManagement;
 | 
				
			||||||
 | 
								CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Union;
 | 
				
			||||||
 | 
								USB_Descriptor_Endpoint_t                ManagementEndpoint;
 | 
				
			||||||
 | 
								USB_Descriptor_Interface_t               DCI_Interface;
 | 
				
			||||||
 | 
								USB_Descriptor_Endpoint_t                DataOutEndpoint;
 | 
				
			||||||
 | 
								USB_Descriptor_Endpoint_t                DataInEndpoint;
 | 
				
			||||||
 | 
								USB_Descriptor_Interface_t               InterfaceHID;
 | 
				
			||||||
 | 
								USB_HID_Descriptor_t                     MouseHID;
 | 
				
			||||||
 | 
						        USB_Descriptor_Endpoint_t                MouseEndpoint;
 | 
				
			||||||
 | 
							} USB_Descriptor_Configuration_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Function Prototypes: */
 | 
				
			||||||
 | 
							uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)
 | 
				
			||||||
 | 
							                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@ -0,0 +1,1485 @@
 | 
				
			|||||||
 | 
					# Doxyfile 1.5.7.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This file describes the settings to be used by the documentation system
 | 
				
			||||||
 | 
					# doxygen (www.doxygen.org) for a project
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# All text after a hash (#) is considered a comment and will be ignored
 | 
				
			||||||
 | 
					# The format is:
 | 
				
			||||||
 | 
					#       TAG = value [value, ...]
 | 
				
			||||||
 | 
					# For lists items can also be appended using:
 | 
				
			||||||
 | 
					#       TAG += value [value, ...]
 | 
				
			||||||
 | 
					# Values that contain spaces should be placed between quotes (" ")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Project related configuration options
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This tag specifies the encoding used for all characters in the config file 
 | 
				
			||||||
 | 
					# that follow. The default is UTF-8 which is also the encoding used for all 
 | 
				
			||||||
 | 
					# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
 | 
				
			||||||
 | 
					# iconv built into libc) for the transcoding. See 
 | 
				
			||||||
 | 
					# http://www.gnu.org/software/libiconv for the list of possible encodings.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOXYFILE_ENCODING      = UTF-8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
 | 
				
			||||||
 | 
					# by quotes) that should identify the project.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PROJECT_NAME           = "LUFA Library - Combined CDC and Mouse Device Demo"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
 | 
				
			||||||
 | 
					# This could be handy for archiving the generated documentation or 
 | 
				
			||||||
 | 
					# if some version control system is used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PROJECT_NUMBER         = 0.0.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 | 
				
			||||||
 | 
					# base path where the generated documentation will be put. 
 | 
				
			||||||
 | 
					# If a relative path is entered, it will be relative to the location 
 | 
				
			||||||
 | 
					# where doxygen was started. If left blank the current directory will be used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OUTPUT_DIRECTORY       = ./Documentation/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
 | 
				
			||||||
 | 
					# 4096 sub-directories (in 2 levels) under the output directory of each output 
 | 
				
			||||||
 | 
					# format and will distribute the generated files over these directories. 
 | 
				
			||||||
 | 
					# Enabling this option can be useful when feeding doxygen a huge amount of 
 | 
				
			||||||
 | 
					# source files, where putting all generated files in the same directory would 
 | 
				
			||||||
 | 
					# otherwise cause performance problems for the file system.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CREATE_SUBDIRS         = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
 | 
				
			||||||
 | 
					# documentation generated by doxygen is written. Doxygen will use this 
 | 
				
			||||||
 | 
					# information to generate all constant output in the proper language. 
 | 
				
			||||||
 | 
					# The default language is English, other supported languages are: 
 | 
				
			||||||
 | 
					# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
 | 
				
			||||||
 | 
					# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, 
 | 
				
			||||||
 | 
					# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), 
 | 
				
			||||||
 | 
					# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, 
 | 
				
			||||||
 | 
					# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, 
 | 
				
			||||||
 | 
					# Spanish, Swedish, and Ukrainian.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OUTPUT_LANGUAGE        = English
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
 | 
				
			||||||
 | 
					# include brief member descriptions after the members that are listed in 
 | 
				
			||||||
 | 
					# the file and class documentation (similar to JavaDoc). 
 | 
				
			||||||
 | 
					# Set to NO to disable this.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BRIEF_MEMBER_DESC      = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
 | 
				
			||||||
 | 
					# the brief description of a member or function before the detailed description. 
 | 
				
			||||||
 | 
					# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
 | 
				
			||||||
 | 
					# brief descriptions will be completely suppressed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					REPEAT_BRIEF           = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This tag implements a quasi-intelligent brief description abbreviator 
 | 
				
			||||||
 | 
					# that is used to form the text in various listings. Each string 
 | 
				
			||||||
 | 
					# in this list, if found as the leading text of the brief description, will be 
 | 
				
			||||||
 | 
					# stripped from the text and the result after processing the whole list, is 
 | 
				
			||||||
 | 
					# used as the annotated text. Otherwise, the brief description is used as-is. 
 | 
				
			||||||
 | 
					# If left blank, the following values are used ("$name" is automatically 
 | 
				
			||||||
 | 
					# replaced with the name of the entity): "The $name class" "The $name widget" 
 | 
				
			||||||
 | 
					# "The $name file" "is" "provides" "specifies" "contains" 
 | 
				
			||||||
 | 
					# "represents" "a" "an" "the"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ABBREVIATE_BRIEF       = "The $name class" \
 | 
				
			||||||
 | 
					                         "The $name widget" \
 | 
				
			||||||
 | 
					                         "The $name file" \
 | 
				
			||||||
 | 
					                         is \
 | 
				
			||||||
 | 
					                         provides \
 | 
				
			||||||
 | 
					                         specifies \
 | 
				
			||||||
 | 
					                         contains \
 | 
				
			||||||
 | 
					                         represents \
 | 
				
			||||||
 | 
					                         a \
 | 
				
			||||||
 | 
					                         an \
 | 
				
			||||||
 | 
					                         the
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
 | 
				
			||||||
 | 
					# Doxygen will generate a detailed section even if there is only a brief 
 | 
				
			||||||
 | 
					# description.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ALWAYS_DETAILED_SEC    = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
 | 
				
			||||||
 | 
					# inherited members of a class in the documentation of that class as if those 
 | 
				
			||||||
 | 
					# members were ordinary class members. Constructors, destructors and assignment 
 | 
				
			||||||
 | 
					# operators of the base classes will not be shown.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INLINE_INHERITED_MEMB  = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
 | 
				
			||||||
 | 
					# path before files name in the file list and in the header files. If set 
 | 
				
			||||||
 | 
					# to NO the shortest path that makes the file name unique will be used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FULL_PATH_NAMES        = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
 | 
				
			||||||
 | 
					# can be used to strip a user-defined part of the path. Stripping is 
 | 
				
			||||||
 | 
					# only done if one of the specified strings matches the left-hand part of 
 | 
				
			||||||
 | 
					# the path. The tag can be used to show relative paths in the file list. 
 | 
				
			||||||
 | 
					# If left blank the directory from which doxygen is run is used as the 
 | 
				
			||||||
 | 
					# path to strip.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRIP_FROM_PATH        = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
 | 
				
			||||||
 | 
					# the path mentioned in the documentation of a class, which tells 
 | 
				
			||||||
 | 
					# the reader which header file to include in order to use a class. 
 | 
				
			||||||
 | 
					# If left blank only the name of the header file containing the class 
 | 
				
			||||||
 | 
					# definition is used. Otherwise one should specify the include paths that 
 | 
				
			||||||
 | 
					# are normally passed to the compiler using the -I flag.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRIP_FROM_INC_PATH    = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
 | 
				
			||||||
 | 
					# (but less readable) file names. This can be useful is your file systems 
 | 
				
			||||||
 | 
					# doesn't support long names like on DOS, Mac, or CD-ROM.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SHORT_NAMES            = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
 | 
				
			||||||
 | 
					# will interpret the first line (until the first dot) of a JavaDoc-style 
 | 
				
			||||||
 | 
					# comment as the brief description. If set to NO, the JavaDoc 
 | 
				
			||||||
 | 
					# comments will behave just like regular Qt-style comments 
 | 
				
			||||||
 | 
					# (thus requiring an explicit @brief command for a brief description.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					JAVADOC_AUTOBRIEF      = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
 | 
				
			||||||
 | 
					# interpret the first line (until the first dot) of a Qt-style 
 | 
				
			||||||
 | 
					# comment as the brief description. If set to NO, the comments 
 | 
				
			||||||
 | 
					# will behave just like regular Qt-style comments (thus requiring 
 | 
				
			||||||
 | 
					# an explicit \brief command for a brief description.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QT_AUTOBRIEF           = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
 | 
				
			||||||
 | 
					# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
 | 
				
			||||||
 | 
					# comments) as a brief description. This used to be the default behaviour. 
 | 
				
			||||||
 | 
					# The new default is to treat a multi-line C++ comment block as a detailed 
 | 
				
			||||||
 | 
					# description. Set this tag to YES if you prefer the old behaviour instead.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MULTILINE_CPP_IS_BRIEF = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
 | 
				
			||||||
 | 
					# member inherits the documentation from any documented member that it 
 | 
				
			||||||
 | 
					# re-implements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INHERIT_DOCS           = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
 | 
				
			||||||
 | 
					# a new page for each member. If set to NO, the documentation of a member will 
 | 
				
			||||||
 | 
					# be part of the file/class/namespace that contains it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SEPARATE_MEMBER_PAGES  = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
 | 
				
			||||||
 | 
					# Doxygen uses this value to replace tabs by spaces in code fragments.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TAB_SIZE               = 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This tag can be used to specify a number of aliases that acts 
 | 
				
			||||||
 | 
					# as commands in the documentation. An alias has the form "name=value". 
 | 
				
			||||||
 | 
					# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
 | 
				
			||||||
 | 
					# put the command \sideeffect (or @sideeffect) in the documentation, which 
 | 
				
			||||||
 | 
					# will result in a user-defined paragraph with heading "Side Effects:". 
 | 
				
			||||||
 | 
					# You can put \n's in the value part of an alias to insert newlines.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ALIASES                = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
 | 
				
			||||||
 | 
					# sources only. Doxygen will then generate output that is more tailored for C. 
 | 
				
			||||||
 | 
					# For instance, some of the names that are used will be different. The list 
 | 
				
			||||||
 | 
					# of all members will be omitted, etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OPTIMIZE_OUTPUT_FOR_C  = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
 | 
				
			||||||
 | 
					# sources only. Doxygen will then generate output that is more tailored for 
 | 
				
			||||||
 | 
					# Java. For instance, namespaces will be presented as packages, qualified 
 | 
				
			||||||
 | 
					# scopes will look different, etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OPTIMIZE_OUTPUT_JAVA   = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
 | 
				
			||||||
 | 
					# sources only. Doxygen will then generate output that is more tailored for 
 | 
				
			||||||
 | 
					# Fortran.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OPTIMIZE_FOR_FORTRAN   = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
 | 
				
			||||||
 | 
					# sources. Doxygen will then generate output that is tailored for 
 | 
				
			||||||
 | 
					# VHDL.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OPTIMIZE_OUTPUT_VHDL   = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
 | 
				
			||||||
 | 
					# to include (a tag file for) the STL sources as input, then you should 
 | 
				
			||||||
 | 
					# set this tag to YES in order to let doxygen match functions declarations and 
 | 
				
			||||||
 | 
					# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
 | 
				
			||||||
 | 
					# func(std::string) {}). This also make the inheritance and collaboration 
 | 
				
			||||||
 | 
					# diagrams that involve STL classes more complete and accurate.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BUILTIN_STL_SUPPORT    = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If you use Microsoft's C++/CLI language, you should set this option to YES to
 | 
				
			||||||
 | 
					# enable parsing support.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CPP_CLI_SUPPORT        = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
 | 
				
			||||||
 | 
					# Doxygen will parse them like normal C++ but will assume all classes use public 
 | 
				
			||||||
 | 
					# instead of private inheritance when no explicit protection keyword is present.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SIP_SUPPORT            = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# For Microsoft's IDL there are propget and propput attributes to indicate getter 
 | 
				
			||||||
 | 
					# and setter methods for a property. Setting this option to YES (the default) 
 | 
				
			||||||
 | 
					# will make doxygen to replace the get and set methods by a property in the 
 | 
				
			||||||
 | 
					# documentation. This will only work if the methods are indeed getting or 
 | 
				
			||||||
 | 
					# setting a simple type. If this is not the case, or you want to show the 
 | 
				
			||||||
 | 
					# methods anyway, you should set this option to NO.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IDL_PROPERTY_SUPPORT   = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
 | 
				
			||||||
 | 
					# tag is set to YES, then doxygen will reuse the documentation of the first 
 | 
				
			||||||
 | 
					# member in the group (if any) for the other members of the group. By default 
 | 
				
			||||||
 | 
					# all members of a group must be documented explicitly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DISTRIBUTE_GROUP_DOC   = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
 | 
				
			||||||
 | 
					# the same type (for instance a group of public functions) to be put as a 
 | 
				
			||||||
 | 
					# subgroup of that type (e.g. under the Public Functions section). Set it to 
 | 
				
			||||||
 | 
					# NO to prevent subgrouping. Alternatively, this can be done per class using 
 | 
				
			||||||
 | 
					# the \nosubgrouping command.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SUBGROUPING            = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
 | 
				
			||||||
 | 
					# is documented as struct, union, or enum with the name of the typedef. So 
 | 
				
			||||||
 | 
					# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
 | 
				
			||||||
 | 
					# with name TypeT. When disabled the typedef will appear as a member of a file, 
 | 
				
			||||||
 | 
					# namespace, or class. And the struct will be named TypeS. This can typically 
 | 
				
			||||||
 | 
					# be useful for C code in case the coding convention dictates that all compound 
 | 
				
			||||||
 | 
					# types are typedef'ed and only the typedef is referenced, never the tag name.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TYPEDEF_HIDES_STRUCT   = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
 | 
				
			||||||
 | 
					# determine which symbols to keep in memory and which to flush to disk.
 | 
				
			||||||
 | 
					# When the cache is full, less often used symbols will be written to disk.
 | 
				
			||||||
 | 
					# For small to medium size projects (<1000 input files) the default value is 
 | 
				
			||||||
 | 
					# probably good enough. For larger projects a too small cache size can cause 
 | 
				
			||||||
 | 
					# doxygen to be busy swapping symbols to and from disk most of the time 
 | 
				
			||||||
 | 
					# causing a significant performance penality. 
 | 
				
			||||||
 | 
					# If the system has enough physical memory increasing the cache will improve the 
 | 
				
			||||||
 | 
					# performance by keeping more symbols in memory. Note that the value works on 
 | 
				
			||||||
 | 
					# a logarithmic scale so increasing the size by one will rougly double the 
 | 
				
			||||||
 | 
					# memory usage. The cache size is given by this formula: 
 | 
				
			||||||
 | 
					# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
 | 
				
			||||||
 | 
					# corresponding to a cache size of 2^16 = 65536 symbols
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SYMBOL_CACHE_SIZE      = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Build related configuration options
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
 | 
				
			||||||
 | 
					# documentation are documented, even if no documentation was available. 
 | 
				
			||||||
 | 
					# Private class members and static file members will be hidden unless 
 | 
				
			||||||
 | 
					# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXTRACT_ALL            = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
 | 
				
			||||||
 | 
					# will be included in the documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXTRACT_PRIVATE        = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the EXTRACT_STATIC tag is set to YES all static members of a file 
 | 
				
			||||||
 | 
					# will be included in the documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXTRACT_STATIC         = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
 | 
				
			||||||
 | 
					# defined locally in source files will be included in the documentation. 
 | 
				
			||||||
 | 
					# If set to NO only classes defined in header files are included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXTRACT_LOCAL_CLASSES  = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This flag is only useful for Objective-C code. When set to YES local 
 | 
				
			||||||
 | 
					# methods, which are defined in the implementation section but not in 
 | 
				
			||||||
 | 
					# the interface are included in the documentation. 
 | 
				
			||||||
 | 
					# If set to NO (the default) only methods in the interface are included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXTRACT_LOCAL_METHODS  = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If this flag is set to YES, the members of anonymous namespaces will be 
 | 
				
			||||||
 | 
					# extracted and appear in the documentation as a namespace called 
 | 
				
			||||||
 | 
					# 'anonymous_namespace{file}', where file will be replaced with the base 
 | 
				
			||||||
 | 
					# name of the file that contains the anonymous namespace. By default 
 | 
				
			||||||
 | 
					# anonymous namespace are hidden.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXTRACT_ANON_NSPACES   = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
 | 
				
			||||||
 | 
					# undocumented members of documented classes, files or namespaces. 
 | 
				
			||||||
 | 
					# If set to NO (the default) these members will be included in the 
 | 
				
			||||||
 | 
					# various overviews, but no documentation section is generated. 
 | 
				
			||||||
 | 
					# This option has no effect if EXTRACT_ALL is enabled.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HIDE_UNDOC_MEMBERS     = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
 | 
				
			||||||
 | 
					# undocumented classes that are normally visible in the class hierarchy. 
 | 
				
			||||||
 | 
					# If set to NO (the default) these classes will be included in the various 
 | 
				
			||||||
 | 
					# overviews. This option has no effect if EXTRACT_ALL is enabled.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HIDE_UNDOC_CLASSES     = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
 | 
				
			||||||
 | 
					# friend (class|struct|union) declarations. 
 | 
				
			||||||
 | 
					# If set to NO (the default) these declarations will be included in the 
 | 
				
			||||||
 | 
					# documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HIDE_FRIEND_COMPOUNDS  = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
 | 
				
			||||||
 | 
					# documentation blocks found inside the body of a function. 
 | 
				
			||||||
 | 
					# If set to NO (the default) these blocks will be appended to the 
 | 
				
			||||||
 | 
					# function's detailed documentation block.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HIDE_IN_BODY_DOCS      = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The INTERNAL_DOCS tag determines if documentation 
 | 
				
			||||||
 | 
					# that is typed after a \internal command is included. If the tag is set 
 | 
				
			||||||
 | 
					# to NO (the default) then the documentation will be excluded. 
 | 
				
			||||||
 | 
					# Set it to YES to include the internal documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INTERNAL_DOCS          = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
 | 
				
			||||||
 | 
					# file names in lower-case letters. If set to YES upper-case letters are also 
 | 
				
			||||||
 | 
					# allowed. This is useful if you have classes or files whose names only differ 
 | 
				
			||||||
 | 
					# in case and if your file system supports case sensitive file names. Windows 
 | 
				
			||||||
 | 
					# and Mac users are advised to set this option to NO.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CASE_SENSE_NAMES       = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
 | 
				
			||||||
 | 
					# will show members with their full class and namespace scopes in the 
 | 
				
			||||||
 | 
					# documentation. If set to YES the scope will be hidden.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HIDE_SCOPE_NAMES       = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
 | 
				
			||||||
 | 
					# will put a list of the files that are included by a file in the documentation 
 | 
				
			||||||
 | 
					# of that file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SHOW_INCLUDE_FILES     = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
 | 
				
			||||||
 | 
					# is inserted in the documentation for inline members.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INLINE_INFO            = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
 | 
				
			||||||
 | 
					# will sort the (detailed) documentation of file and class members 
 | 
				
			||||||
 | 
					# alphabetically by member name. If set to NO the members will appear in 
 | 
				
			||||||
 | 
					# declaration order.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SORT_MEMBER_DOCS       = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
 | 
				
			||||||
 | 
					# brief documentation of file, namespace and class members alphabetically 
 | 
				
			||||||
 | 
					# by member name. If set to NO (the default) the members will appear in 
 | 
				
			||||||
 | 
					# declaration order.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SORT_BRIEF_DOCS        = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
 | 
				
			||||||
 | 
					# hierarchy of group names into alphabetical order. If set to NO (the default) 
 | 
				
			||||||
 | 
					# the group names will appear in their defined order.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SORT_GROUP_NAMES       = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
 | 
				
			||||||
 | 
					# sorted by fully-qualified names, including namespaces. If set to 
 | 
				
			||||||
 | 
					# NO (the default), the class list will be sorted only by class name, 
 | 
				
			||||||
 | 
					# not including the namespace part. 
 | 
				
			||||||
 | 
					# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
 | 
				
			||||||
 | 
					# Note: This option applies only to the class list, not to the 
 | 
				
			||||||
 | 
					# alphabetical list.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SORT_BY_SCOPE_NAME     = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The GENERATE_TODOLIST tag can be used to enable (YES) or 
 | 
				
			||||||
 | 
					# disable (NO) the todo list. This list is created by putting \todo 
 | 
				
			||||||
 | 
					# commands in the documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_TODOLIST      = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The GENERATE_TESTLIST tag can be used to enable (YES) or 
 | 
				
			||||||
 | 
					# disable (NO) the test list. This list is created by putting \test 
 | 
				
			||||||
 | 
					# commands in the documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_TESTLIST      = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The GENERATE_BUGLIST tag can be used to enable (YES) or 
 | 
				
			||||||
 | 
					# disable (NO) the bug list. This list is created by putting \bug 
 | 
				
			||||||
 | 
					# commands in the documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_BUGLIST       = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
 | 
				
			||||||
 | 
					# disable (NO) the deprecated list. This list is created by putting 
 | 
				
			||||||
 | 
					# \deprecated commands in the documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_DEPRECATEDLIST= YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The ENABLED_SECTIONS tag can be used to enable conditional 
 | 
				
			||||||
 | 
					# documentation sections, marked by \if sectionname ... \endif.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ENABLED_SECTIONS       = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
 | 
				
			||||||
 | 
					# the initial value of a variable or define consists of for it to appear in 
 | 
				
			||||||
 | 
					# the documentation. If the initializer consists of more lines than specified 
 | 
				
			||||||
 | 
					# here it will be hidden. Use a value of 0 to hide initializers completely. 
 | 
				
			||||||
 | 
					# The appearance of the initializer of individual variables and defines in the 
 | 
				
			||||||
 | 
					# documentation can be controlled using \showinitializer or \hideinitializer 
 | 
				
			||||||
 | 
					# command in the documentation regardless of this setting.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MAX_INITIALIZER_LINES  = 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
 | 
				
			||||||
 | 
					# at the bottom of the documentation of classes and structs. If set to YES the 
 | 
				
			||||||
 | 
					# list will mention the files that were used to generate the documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SHOW_USED_FILES        = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the sources in your project are distributed over multiple directories 
 | 
				
			||||||
 | 
					# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
 | 
				
			||||||
 | 
					# in the documentation. The default is NO.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SHOW_DIRECTORIES       = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
 | 
				
			||||||
 | 
					# This will remove the Files entry from the Quick Index and from the 
 | 
				
			||||||
 | 
					# Folder Tree View (if specified). The default is YES.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SHOW_FILES             = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
 | 
				
			||||||
 | 
					# Namespaces page.  This will remove the Namespaces entry from the Quick Index
 | 
				
			||||||
 | 
					# and from the Folder Tree View (if specified). The default is YES.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SHOW_NAMESPACES        = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
 | 
				
			||||||
 | 
					# doxygen should invoke to get the current version for each file (typically from 
 | 
				
			||||||
 | 
					# the version control system). Doxygen will invoke the program by executing (via 
 | 
				
			||||||
 | 
					# popen()) the command <command> <input-file>, where <command> is the value of 
 | 
				
			||||||
 | 
					# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
 | 
				
			||||||
 | 
					# provided by doxygen. Whatever the program writes to standard output 
 | 
				
			||||||
 | 
					# is used as the file version. See the manual for examples.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FILE_VERSION_FILTER    = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by 
 | 
				
			||||||
 | 
					# doxygen. The layout file controls the global structure of the generated output files 
 | 
				
			||||||
 | 
					# in an output format independent way. The create the layout file that represents 
 | 
				
			||||||
 | 
					# doxygen's defaults, run doxygen with the -l option. You can optionally specify a 
 | 
				
			||||||
 | 
					# file name after the option, if omitted DoxygenLayout.xml will be used as the name 
 | 
				
			||||||
 | 
					# of the layout file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LAYOUT_FILE            = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# configuration options related to warning and progress messages
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The QUIET tag can be used to turn on/off the messages that are generated 
 | 
				
			||||||
 | 
					# by doxygen. Possible values are YES and NO. If left blank NO is used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QUIET                  = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The WARNINGS tag can be used to turn on/off the warning messages that are 
 | 
				
			||||||
 | 
					# generated by doxygen. Possible values are YES and NO. If left blank 
 | 
				
			||||||
 | 
					# NO is used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WARNINGS               = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
 | 
				
			||||||
 | 
					# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
 | 
				
			||||||
 | 
					# automatically be disabled.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WARN_IF_UNDOCUMENTED   = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
 | 
				
			||||||
 | 
					# potential errors in the documentation, such as not documenting some 
 | 
				
			||||||
 | 
					# parameters in a documented function, or documenting parameters that 
 | 
				
			||||||
 | 
					# don't exist or using markup commands wrongly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WARN_IF_DOC_ERROR      = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This WARN_NO_PARAMDOC option can be abled to get warnings for 
 | 
				
			||||||
 | 
					# functions that are documented, but have no documentation for their parameters 
 | 
				
			||||||
 | 
					# or return value. If set to NO (the default) doxygen will only warn about 
 | 
				
			||||||
 | 
					# wrong or incomplete parameter documentation, but not about the absence of 
 | 
				
			||||||
 | 
					# documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WARN_NO_PARAMDOC       = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The WARN_FORMAT tag determines the format of the warning messages that 
 | 
				
			||||||
 | 
					# doxygen can produce. The string should contain the $file, $line, and $text 
 | 
				
			||||||
 | 
					# tags, which will be replaced by the file and line number from which the 
 | 
				
			||||||
 | 
					# warning originated and the warning text. Optionally the format may contain 
 | 
				
			||||||
 | 
					# $version, which will be replaced by the version of the file (if it could 
 | 
				
			||||||
 | 
					# be obtained via FILE_VERSION_FILTER)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WARN_FORMAT            = "$file:$line: $text"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The WARN_LOGFILE tag can be used to specify a file to which warning 
 | 
				
			||||||
 | 
					# and error messages should be written. If left blank the output is written 
 | 
				
			||||||
 | 
					# to stderr.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WARN_LOGFILE           = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# configuration options related to the input files
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The INPUT tag can be used to specify the files and/or directories that contain 
 | 
				
			||||||
 | 
					# documented source files. You may enter file names like "myfile.cpp" or 
 | 
				
			||||||
 | 
					# directories like "/usr/src/myproject". Separate the files or directories 
 | 
				
			||||||
 | 
					# with spaces.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INPUT                  = ./
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This tag can be used to specify the character encoding of the source files 
 | 
				
			||||||
 | 
					# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
 | 
				
			||||||
 | 
					# also the default input encoding. Doxygen uses libiconv (or the iconv built 
 | 
				
			||||||
 | 
					# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
 | 
				
			||||||
 | 
					# the list of possible encodings.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INPUT_ENCODING         = UTF-8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the value of the INPUT tag contains directories, you can use the 
 | 
				
			||||||
 | 
					# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
 | 
				
			||||||
 | 
					# and *.h) to filter out the source-files in the directories. If left 
 | 
				
			||||||
 | 
					# blank the following patterns are tested: 
 | 
				
			||||||
 | 
					# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
 | 
				
			||||||
 | 
					# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FILE_PATTERNS          = *.h \
 | 
				
			||||||
 | 
					                         *.c \
 | 
				
			||||||
 | 
											 *.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
 | 
				
			||||||
 | 
					# should be searched for input files as well. Possible values are YES and NO. 
 | 
				
			||||||
 | 
					# If left blank NO is used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RECURSIVE              = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The EXCLUDE tag can be used to specify files and/or directories that should 
 | 
				
			||||||
 | 
					# excluded from the INPUT source files. This way you can easily exclude a 
 | 
				
			||||||
 | 
					# subdirectory from a directory tree whose root is specified with the INPUT tag.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXCLUDE                = Documentation/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
 | 
				
			||||||
 | 
					# directories that are symbolic links (a Unix filesystem feature) are excluded 
 | 
				
			||||||
 | 
					# from the input.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXCLUDE_SYMLINKS       = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the value of the INPUT tag contains directories, you can use the 
 | 
				
			||||||
 | 
					# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
 | 
				
			||||||
 | 
					# certain files from those directories. Note that the wildcards are matched 
 | 
				
			||||||
 | 
					# against the file with absolute path, so to exclude all test directories 
 | 
				
			||||||
 | 
					# for example use the pattern */test/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXCLUDE_PATTERNS       = */LowLevel/USBMode.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
 | 
				
			||||||
 | 
					# (namespaces, classes, functions, etc.) that should be excluded from the 
 | 
				
			||||||
 | 
					# output. The symbol name can be a fully qualified name, a word, or if the 
 | 
				
			||||||
 | 
					# wildcard * is used, a substring. Examples: ANamespace, AClass, 
 | 
				
			||||||
 | 
					# AClass::ANamespace, ANamespace::*Test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXCLUDE_SYMBOLS        = __*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The EXAMPLE_PATH tag can be used to specify one or more files or 
 | 
				
			||||||
 | 
					# directories that contain example code fragments that are included (see 
 | 
				
			||||||
 | 
					# the \include command).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXAMPLE_PATH           = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
 | 
				
			||||||
 | 
					# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
 | 
				
			||||||
 | 
					# and *.h) to filter out the source-files in the directories. If left 
 | 
				
			||||||
 | 
					# blank all files are included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXAMPLE_PATTERNS       = *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
 | 
				
			||||||
 | 
					# searched for input files to be used with the \include or \dontinclude 
 | 
				
			||||||
 | 
					# commands irrespective of the value of the RECURSIVE tag. 
 | 
				
			||||||
 | 
					# Possible values are YES and NO. If left blank NO is used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXAMPLE_RECURSIVE      = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The IMAGE_PATH tag can be used to specify one or more files or 
 | 
				
			||||||
 | 
					# directories that contain image that are included in the documentation (see 
 | 
				
			||||||
 | 
					# the \image command).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IMAGE_PATH             = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The INPUT_FILTER tag can be used to specify a program that doxygen should 
 | 
				
			||||||
 | 
					# invoke to filter for each input file. Doxygen will invoke the filter program 
 | 
				
			||||||
 | 
					# by executing (via popen()) the command <filter> <input-file>, where <filter> 
 | 
				
			||||||
 | 
					# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
 | 
				
			||||||
 | 
					# input file. Doxygen will then use the output that the filter program writes 
 | 
				
			||||||
 | 
					# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
 | 
				
			||||||
 | 
					# ignored.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INPUT_FILTER           = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
 | 
				
			||||||
 | 
					# basis.  Doxygen will compare the file name with each pattern and apply the 
 | 
				
			||||||
 | 
					# filter if there is a match.  The filters are a list of the form: 
 | 
				
			||||||
 | 
					# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
 | 
				
			||||||
 | 
					# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
 | 
				
			||||||
 | 
					# is applied to all files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FILTER_PATTERNS        = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
 | 
				
			||||||
 | 
					# INPUT_FILTER) will be used to filter the input files when producing source 
 | 
				
			||||||
 | 
					# files to browse (i.e. when SOURCE_BROWSER is set to YES).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FILTER_SOURCE_FILES    = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# configuration options related to source browsing
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
 | 
				
			||||||
 | 
					# be generated. Documented entities will be cross-referenced with these sources. 
 | 
				
			||||||
 | 
					# Note: To get rid of all source code in the generated output, make sure also 
 | 
				
			||||||
 | 
					# VERBATIM_HEADERS is set to NO.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE_BROWSER         = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Setting the INLINE_SOURCES tag to YES will include the body 
 | 
				
			||||||
 | 
					# of functions and classes directly in the documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INLINE_SOURCES         = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
 | 
				
			||||||
 | 
					# doxygen to hide any special comment blocks from generated source code 
 | 
				
			||||||
 | 
					# fragments. Normal C and C++ comments will always remain visible.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRIP_CODE_COMMENTS    = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the REFERENCED_BY_RELATION tag is set to YES 
 | 
				
			||||||
 | 
					# then for each documented function all documented 
 | 
				
			||||||
 | 
					# functions referencing it will be listed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					REFERENCED_BY_RELATION = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the REFERENCES_RELATION tag is set to YES 
 | 
				
			||||||
 | 
					# then for each documented function all documented entities 
 | 
				
			||||||
 | 
					# called/used by that function will be listed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					REFERENCES_RELATION    = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
 | 
				
			||||||
 | 
					# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
 | 
				
			||||||
 | 
					# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
 | 
				
			||||||
 | 
					# link to the source code.  Otherwise they will link to the documentstion.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					REFERENCES_LINK_SOURCE = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the USE_HTAGS tag is set to YES then the references to source code 
 | 
				
			||||||
 | 
					# will point to the HTML generated by the htags(1) tool instead of doxygen 
 | 
				
			||||||
 | 
					# built-in source browser. The htags tool is part of GNU's global source 
 | 
				
			||||||
 | 
					# tagging system (see http://www.gnu.org/software/global/global.html). You 
 | 
				
			||||||
 | 
					# will need version 4.8.6 or higher.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					USE_HTAGS              = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
 | 
				
			||||||
 | 
					# will generate a verbatim copy of the header file for each class for 
 | 
				
			||||||
 | 
					# which an include is specified. Set to NO to disable this.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VERBATIM_HEADERS       = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# configuration options related to the alphabetical class index
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
 | 
				
			||||||
 | 
					# of all compounds will be generated. Enable this if the project 
 | 
				
			||||||
 | 
					# contains a lot of classes, structs, unions or interfaces.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ALPHABETICAL_INDEX     = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
 | 
				
			||||||
 | 
					# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
 | 
				
			||||||
 | 
					# in which this list will be split (can be a number in the range [1..20])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COLS_IN_ALPHA_INDEX    = 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# In case all classes in a project start with a common prefix, all 
 | 
				
			||||||
 | 
					# classes will be put under the same header in the alphabetical index. 
 | 
				
			||||||
 | 
					# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
 | 
				
			||||||
 | 
					# should be ignored while generating the index headers.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IGNORE_PREFIX          = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# configuration options related to the HTML output
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
 | 
				
			||||||
 | 
					# generate HTML output.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_HTML          = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
 | 
				
			||||||
 | 
					# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||||
 | 
					# put in front of it. If left blank `html' will be used as the default path.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HTML_OUTPUT            = html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
 | 
				
			||||||
 | 
					# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
 | 
				
			||||||
 | 
					# doxygen will generate files with .html extension.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HTML_FILE_EXTENSION    = .html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The HTML_HEADER tag can be used to specify a personal HTML header for 
 | 
				
			||||||
 | 
					# each generated HTML page. If it is left blank doxygen will generate a 
 | 
				
			||||||
 | 
					# standard header.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HTML_HEADER            = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
 | 
				
			||||||
 | 
					# each generated HTML page. If it is left blank doxygen will generate a 
 | 
				
			||||||
 | 
					# standard footer.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HTML_FOOTER            = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
 | 
				
			||||||
 | 
					# style sheet that is used by each HTML page. It can be used to 
 | 
				
			||||||
 | 
					# fine-tune the look of the HTML output. If the tag is left blank doxygen 
 | 
				
			||||||
 | 
					# will generate a default style sheet. Note that doxygen will try to copy 
 | 
				
			||||||
 | 
					# the style sheet file to the HTML output directory, so don't put your own 
 | 
				
			||||||
 | 
					# stylesheet in the HTML output directory as well, or it will be erased!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HTML_STYLESHEET        = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
 | 
				
			||||||
 | 
					# files or namespaces will be aligned in HTML using tables. If set to 
 | 
				
			||||||
 | 
					# NO a bullet list will be used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HTML_ALIGN_MEMBERS     = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
 | 
				
			||||||
 | 
					# documentation will contain sections that can be hidden and shown after the 
 | 
				
			||||||
 | 
					# page has loaded. For this to work a browser that supports 
 | 
				
			||||||
 | 
					# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
 | 
				
			||||||
 | 
					# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HTML_DYNAMIC_SECTIONS  = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_DOCSET tag is set to YES, additional index files 
 | 
				
			||||||
 | 
					# will be generated that can be used as input for Apple's Xcode 3 
 | 
				
			||||||
 | 
					# integrated development environment, introduced with OSX 10.5 (Leopard). 
 | 
				
			||||||
 | 
					# To create a documentation set, doxygen will generate a Makefile in the 
 | 
				
			||||||
 | 
					# HTML output directory. Running make will produce the docset in that 
 | 
				
			||||||
 | 
					# directory and running "make install" will install the docset in 
 | 
				
			||||||
 | 
					# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
 | 
				
			||||||
 | 
					# it at startup. 
 | 
				
			||||||
 | 
					# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_DOCSET        = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
 | 
				
			||||||
 | 
					# feed. A documentation feed provides an umbrella under which multiple 
 | 
				
			||||||
 | 
					# documentation sets from a single provider (such as a company or product suite) 
 | 
				
			||||||
 | 
					# can be grouped.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOCSET_FEEDNAME        = "Doxygen generated docs"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
 | 
				
			||||||
 | 
					# should uniquely identify the documentation set bundle. This should be a 
 | 
				
			||||||
 | 
					# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
 | 
				
			||||||
 | 
					# will append .docset to the name.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOCSET_BUNDLE_ID       = org.doxygen.Project
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
 | 
				
			||||||
 | 
					# will be generated that can be used as input for tools like the 
 | 
				
			||||||
 | 
					# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
 | 
				
			||||||
 | 
					# of the generated HTML documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_HTMLHELP      = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
 | 
				
			||||||
 | 
					# be used to specify the file name of the resulting .chm file. You 
 | 
				
			||||||
 | 
					# can add a path in front of the file if the result should not be 
 | 
				
			||||||
 | 
					# written to the html output directory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CHM_FILE               = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
 | 
				
			||||||
 | 
					# be used to specify the location (absolute path including file name) of 
 | 
				
			||||||
 | 
					# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
 | 
				
			||||||
 | 
					# the HTML help compiler on the generated index.hhp.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HHC_LOCATION           = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
 | 
				
			||||||
 | 
					# controls if a separate .chi index file is generated (YES) or that 
 | 
				
			||||||
 | 
					# it should be included in the master .chm file (NO).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_CHI           = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
 | 
				
			||||||
 | 
					# is used to encode HtmlHelp index (hhk), content (hhc) and project file
 | 
				
			||||||
 | 
					# content.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CHM_INDEX_ENCODING     = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
 | 
				
			||||||
 | 
					# controls whether a binary table of contents is generated (YES) or a 
 | 
				
			||||||
 | 
					# normal table of contents (NO) in the .chm file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BINARY_TOC             = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The TOC_EXPAND flag can be set to YES to add extra items for group members 
 | 
				
			||||||
 | 
					# to the contents of the HTML help documentation and to the tree view.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TOC_EXPAND             = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER 
 | 
				
			||||||
 | 
					# are set, an additional index file will be generated that can be used as input for 
 | 
				
			||||||
 | 
					# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated 
 | 
				
			||||||
 | 
					# HTML documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_QHP           = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
 | 
				
			||||||
 | 
					# be used to specify the file name of the resulting .qch file. 
 | 
				
			||||||
 | 
					# The path specified is relative to the HTML output folder.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCH_FILE               = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The QHP_NAMESPACE tag specifies the namespace to use when generating 
 | 
				
			||||||
 | 
					# Qt Help Project output. For more information please see 
 | 
				
			||||||
 | 
					# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QHP_NAMESPACE          = org.doxygen.Project
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
 | 
				
			||||||
 | 
					# Qt Help Project output. For more information please see 
 | 
				
			||||||
 | 
					# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QHP_VIRTUAL_FOLDER     = doc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
 | 
				
			||||||
 | 
					# be used to specify the location of Qt's qhelpgenerator. 
 | 
				
			||||||
 | 
					# If non-empty doxygen will try to run qhelpgenerator on the generated 
 | 
				
			||||||
 | 
					# .qhp file .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QHG_LOCATION           = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
 | 
				
			||||||
 | 
					# top of each HTML page. The value NO (the default) enables the index and 
 | 
				
			||||||
 | 
					# the value YES disables it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DISABLE_INDEX          = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This tag can be used to set the number of enum values (range [1..20]) 
 | 
				
			||||||
 | 
					# that doxygen will group on one line in the generated HTML documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ENUM_VALUES_PER_LINE   = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
 | 
				
			||||||
 | 
					# structure should be generated to display hierarchical information.
 | 
				
			||||||
 | 
					# If the tag value is set to FRAME, a side panel will be generated
 | 
				
			||||||
 | 
					# containing a tree-like index structure (just like the one that 
 | 
				
			||||||
 | 
					# is generated for HTML Help). For this to work a browser that supports 
 | 
				
			||||||
 | 
					# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
 | 
				
			||||||
 | 
					# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
 | 
				
			||||||
 | 
					# probably better off using the HTML help feature. Other possible values 
 | 
				
			||||||
 | 
					# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
 | 
				
			||||||
 | 
					# and Class Hierarchy pages using a tree view instead of an ordered list;
 | 
				
			||||||
 | 
					# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
 | 
				
			||||||
 | 
					# disables this behavior completely. For backwards compatibility with previous
 | 
				
			||||||
 | 
					# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
 | 
				
			||||||
 | 
					# respectively.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_TREEVIEW      = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
 | 
				
			||||||
 | 
					# used to set the initial width (in pixels) of the frame in which the tree 
 | 
				
			||||||
 | 
					# is shown.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TREEVIEW_WIDTH         = 250
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use this tag to change the font size of Latex formulas included 
 | 
				
			||||||
 | 
					# as images in the HTML documentation. The default is 10. Note that 
 | 
				
			||||||
 | 
					# when you change the font size after a successful doxygen run you need 
 | 
				
			||||||
 | 
					# to manually remove any form_*.png images from the HTML output directory 
 | 
				
			||||||
 | 
					# to force them to be regenerated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FORMULA_FONTSIZE       = 10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# configuration options related to the LaTeX output
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
 | 
				
			||||||
 | 
					# generate Latex output.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_LATEX         = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
 | 
				
			||||||
 | 
					# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||||
 | 
					# put in front of it. If left blank `latex' will be used as the default path.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LATEX_OUTPUT           = latex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
 | 
				
			||||||
 | 
					# invoked. If left blank `latex' will be used as the default command name.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LATEX_CMD_NAME         = latex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
 | 
				
			||||||
 | 
					# generate index for LaTeX. If left blank `makeindex' will be used as the 
 | 
				
			||||||
 | 
					# default command name.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MAKEINDEX_CMD_NAME     = makeindex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
 | 
				
			||||||
 | 
					# LaTeX documents. This may be useful for small projects and may help to 
 | 
				
			||||||
 | 
					# save some trees in general.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COMPACT_LATEX          = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The PAPER_TYPE tag can be used to set the paper type that is used 
 | 
				
			||||||
 | 
					# by the printer. Possible values are: a4, a4wide, letter, legal and 
 | 
				
			||||||
 | 
					# executive. If left blank a4wide will be used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PAPER_TYPE             = a4wide
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
 | 
				
			||||||
 | 
					# packages that should be included in the LaTeX output.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXTRA_PACKAGES         = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
 | 
				
			||||||
 | 
					# the generated latex document. The header should contain everything until 
 | 
				
			||||||
 | 
					# the first chapter. If it is left blank doxygen will generate a 
 | 
				
			||||||
 | 
					# standard header. Notice: only use this tag if you know what you are doing!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LATEX_HEADER           = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
 | 
				
			||||||
 | 
					# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
 | 
				
			||||||
 | 
					# contain links (just like the HTML output) instead of page references 
 | 
				
			||||||
 | 
					# This makes the output suitable for online browsing using a pdf viewer.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PDF_HYPERLINKS         = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
 | 
				
			||||||
 | 
					# plain latex in the generated Makefile. Set this option to YES to get a 
 | 
				
			||||||
 | 
					# higher quality PDF documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					USE_PDFLATEX           = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
 | 
				
			||||||
 | 
					# command to the generated LaTeX files. This will instruct LaTeX to keep 
 | 
				
			||||||
 | 
					# running if errors occur, instead of asking the user for help. 
 | 
				
			||||||
 | 
					# This option is also used when generating formulas in HTML.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LATEX_BATCHMODE        = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
 | 
				
			||||||
 | 
					# include the index chapters (such as File Index, Compound Index, etc.) 
 | 
				
			||||||
 | 
					# in the output.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LATEX_HIDE_INDICES     = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# configuration options related to the RTF output
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
 | 
				
			||||||
 | 
					# The RTF output is optimized for Word 97 and may not look very pretty with 
 | 
				
			||||||
 | 
					# other RTF readers or editors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_RTF           = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
 | 
				
			||||||
 | 
					# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||||
 | 
					# put in front of it. If left blank `rtf' will be used as the default path.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RTF_OUTPUT             = rtf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
 | 
				
			||||||
 | 
					# RTF documents. This may be useful for small projects and may help to 
 | 
				
			||||||
 | 
					# save some trees in general.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COMPACT_RTF            = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
 | 
				
			||||||
 | 
					# will contain hyperlink fields. The RTF file will 
 | 
				
			||||||
 | 
					# contain links (just like the HTML output) instead of page references. 
 | 
				
			||||||
 | 
					# This makes the output suitable for online browsing using WORD or other 
 | 
				
			||||||
 | 
					# programs which support those fields. 
 | 
				
			||||||
 | 
					# Note: wordpad (write) and others do not support links.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RTF_HYPERLINKS         = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Load stylesheet definitions from file. Syntax is similar to doxygen's 
 | 
				
			||||||
 | 
					# config file, i.e. a series of assignments. You only have to provide 
 | 
				
			||||||
 | 
					# replacements, missing definitions are set to their default value.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RTF_STYLESHEET_FILE    = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set optional variables used in the generation of an rtf document. 
 | 
				
			||||||
 | 
					# Syntax is similar to doxygen's config file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RTF_EXTENSIONS_FILE    = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# configuration options related to the man page output
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
 | 
				
			||||||
 | 
					# generate man pages
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_MAN           = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
 | 
				
			||||||
 | 
					# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||||
 | 
					# put in front of it. If left blank `man' will be used as the default path.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MAN_OUTPUT             = man
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The MAN_EXTENSION tag determines the extension that is added to 
 | 
				
			||||||
 | 
					# the generated man pages (default is the subroutine's section .3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MAN_EXTENSION          = .3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
 | 
				
			||||||
 | 
					# then it will generate one additional man file for each entity 
 | 
				
			||||||
 | 
					# documented in the real man page(s). These additional files 
 | 
				
			||||||
 | 
					# only source the real man page, but without them the man command 
 | 
				
			||||||
 | 
					# would be unable to find the correct page. The default is NO.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MAN_LINKS              = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# configuration options related to the XML output
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_XML tag is set to YES Doxygen will 
 | 
				
			||||||
 | 
					# generate an XML file that captures the structure of 
 | 
				
			||||||
 | 
					# the code including all documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_XML           = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
 | 
				
			||||||
 | 
					# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 | 
				
			||||||
 | 
					# put in front of it. If left blank `xml' will be used as the default path.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					XML_OUTPUT             = xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The XML_SCHEMA tag can be used to specify an XML schema, 
 | 
				
			||||||
 | 
					# which can be used by a validating XML parser to check the 
 | 
				
			||||||
 | 
					# syntax of the XML files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					XML_SCHEMA             = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The XML_DTD tag can be used to specify an XML DTD, 
 | 
				
			||||||
 | 
					# which can be used by a validating XML parser to check the 
 | 
				
			||||||
 | 
					# syntax of the XML files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					XML_DTD                = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
 | 
				
			||||||
 | 
					# dump the program listings (including syntax highlighting 
 | 
				
			||||||
 | 
					# and cross-referencing information) to the XML output. Note that 
 | 
				
			||||||
 | 
					# enabling this will significantly increase the size of the XML output.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					XML_PROGRAMLISTING     = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# configuration options for the AutoGen Definitions output
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
 | 
				
			||||||
 | 
					# generate an AutoGen Definitions (see autogen.sf.net) file 
 | 
				
			||||||
 | 
					# that captures the structure of the code including all 
 | 
				
			||||||
 | 
					# documentation. Note that this feature is still experimental 
 | 
				
			||||||
 | 
					# and incomplete at the moment.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_AUTOGEN_DEF   = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# configuration options related to the Perl module output
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
 | 
				
			||||||
 | 
					# generate a Perl module file that captures the structure of 
 | 
				
			||||||
 | 
					# the code including all documentation. Note that this 
 | 
				
			||||||
 | 
					# feature is still experimental and incomplete at the 
 | 
				
			||||||
 | 
					# moment.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_PERLMOD       = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
 | 
				
			||||||
 | 
					# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
 | 
				
			||||||
 | 
					# to generate PDF and DVI output from the Perl module output.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PERLMOD_LATEX          = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
 | 
				
			||||||
 | 
					# nicely formatted so it can be parsed by a human reader.  This is useful 
 | 
				
			||||||
 | 
					# if you want to understand what is going on.  On the other hand, if this 
 | 
				
			||||||
 | 
					# tag is set to NO the size of the Perl module output will be much smaller 
 | 
				
			||||||
 | 
					# and Perl will parse it just the same.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PERLMOD_PRETTY         = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The names of the make variables in the generated doxyrules.make file 
 | 
				
			||||||
 | 
					# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
 | 
				
			||||||
 | 
					# This is useful so different doxyrules.make files included by the same 
 | 
				
			||||||
 | 
					# Makefile don't overwrite each other's variables.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PERLMOD_MAKEVAR_PREFIX = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Configuration options related to the preprocessor   
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
 | 
				
			||||||
 | 
					# evaluate all C-preprocessor directives found in the sources and include 
 | 
				
			||||||
 | 
					# files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ENABLE_PREPROCESSING   = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
 | 
				
			||||||
 | 
					# names in the source code. If set to NO (the default) only conditional 
 | 
				
			||||||
 | 
					# compilation will be performed. Macro expansion can be done in a controlled 
 | 
				
			||||||
 | 
					# way by setting EXPAND_ONLY_PREDEF to YES.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MACRO_EXPANSION        = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
 | 
				
			||||||
 | 
					# then the macro expansion is limited to the macros specified with the 
 | 
				
			||||||
 | 
					# PREDEFINED and EXPAND_AS_DEFINED tags.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXPAND_ONLY_PREDEF     = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
 | 
				
			||||||
 | 
					# in the INCLUDE_PATH (see below) will be search if a #include is found.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SEARCH_INCLUDES        = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The INCLUDE_PATH tag can be used to specify one or more directories that 
 | 
				
			||||||
 | 
					# contain include files that are not input files but should be processed by 
 | 
				
			||||||
 | 
					# the preprocessor.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INCLUDE_PATH           = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
 | 
				
			||||||
 | 
					# patterns (like *.h and *.hpp) to filter out the header-files in the 
 | 
				
			||||||
 | 
					# directories. If left blank, the patterns specified with FILE_PATTERNS will 
 | 
				
			||||||
 | 
					# be used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INCLUDE_FILE_PATTERNS  = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The PREDEFINED tag can be used to specify one or more macro names that 
 | 
				
			||||||
 | 
					# are defined before the preprocessor is started (similar to the -D option of 
 | 
				
			||||||
 | 
					# gcc). The argument of the tag is a list of macros of the form: name 
 | 
				
			||||||
 | 
					# or name=definition (no spaces). If the definition and the = are 
 | 
				
			||||||
 | 
					# omitted =1 is assumed. To prevent a macro definition from being 
 | 
				
			||||||
 | 
					# undefined via #undef or recursively expanded use the := operator 
 | 
				
			||||||
 | 
					# instead of the = operator.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PREDEFINED             = __DOXYGEN__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
 | 
				
			||||||
 | 
					# this tag can be used to specify a list of macro names that should be expanded. 
 | 
				
			||||||
 | 
					# The macro definition that is found in the sources will be used. 
 | 
				
			||||||
 | 
					# Use the PREDEFINED tag if you want to use a different macro definition.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXPAND_AS_DEFINED      = BUTTLOADTAG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
 | 
				
			||||||
 | 
					# doxygen's preprocessor will remove all function-like macros that are alone 
 | 
				
			||||||
 | 
					# on a line, have an all uppercase name, and do not end with a semicolon. Such 
 | 
				
			||||||
 | 
					# function macros are typically used for boiler-plate code, and will confuse 
 | 
				
			||||||
 | 
					# the parser if not removed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SKIP_FUNCTION_MACROS   = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Configuration::additions related to external references   
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The TAGFILES option can be used to specify one or more tagfiles. 
 | 
				
			||||||
 | 
					# Optionally an initial location of the external documentation 
 | 
				
			||||||
 | 
					# can be added for each tagfile. The format of a tag file without 
 | 
				
			||||||
 | 
					# this location is as follows: 
 | 
				
			||||||
 | 
					#   TAGFILES = file1 file2 ... 
 | 
				
			||||||
 | 
					# Adding location for the tag files is done as follows: 
 | 
				
			||||||
 | 
					#   TAGFILES = file1=loc1 "file2 = loc2" ... 
 | 
				
			||||||
 | 
					# where "loc1" and "loc2" can be relative or absolute paths or 
 | 
				
			||||||
 | 
					# URLs. If a location is present for each tag, the installdox tool 
 | 
				
			||||||
 | 
					# does not have to be run to correct the links.
 | 
				
			||||||
 | 
					# Note that each tag file must have a unique name
 | 
				
			||||||
 | 
					# (where the name does NOT include the path)
 | 
				
			||||||
 | 
					# If a tag file is not located in the directory in which doxygen 
 | 
				
			||||||
 | 
					# is run, you must also specify the path to the tagfile here.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TAGFILES               = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
 | 
				
			||||||
 | 
					# a tag file that is based on the input files it reads.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_TAGFILE       = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
 | 
				
			||||||
 | 
					# in the class index. If set to NO only the inherited external classes 
 | 
				
			||||||
 | 
					# will be listed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ALLEXTERNALS           = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
 | 
				
			||||||
 | 
					# in the modules index. If set to NO, only the current project's groups will 
 | 
				
			||||||
 | 
					# be listed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXTERNAL_GROUPS        = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The PERL_PATH should be the absolute path and name of the perl script 
 | 
				
			||||||
 | 
					# interpreter (i.e. the result of `which perl').
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PERL_PATH              = /usr/bin/perl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Configuration options related to the dot tool   
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
 | 
				
			||||||
 | 
					# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
 | 
				
			||||||
 | 
					# or super classes. Setting the tag to NO turns the diagrams off. Note that 
 | 
				
			||||||
 | 
					# this option is superseded by the HAVE_DOT option below. This is only a 
 | 
				
			||||||
 | 
					# fallback. It is recommended to install and use dot, since it yields more 
 | 
				
			||||||
 | 
					# powerful graphs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CLASS_DIAGRAMS         = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You can define message sequence charts within doxygen comments using the \msc 
 | 
				
			||||||
 | 
					# command. Doxygen will then run the mscgen tool (see 
 | 
				
			||||||
 | 
					# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
 | 
				
			||||||
 | 
					# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
 | 
				
			||||||
 | 
					# the mscgen tool resides. If left empty the tool is assumed to be found in the 
 | 
				
			||||||
 | 
					# default search path.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MSCGEN_PATH            = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If set to YES, the inheritance and collaboration graphs will hide 
 | 
				
			||||||
 | 
					# inheritance and usage relations if the target is undocumented 
 | 
				
			||||||
 | 
					# or is not a class.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HIDE_UNDOC_RELATIONS   = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
 | 
				
			||||||
 | 
					# available from the path. This tool is part of Graphviz, a graph visualization 
 | 
				
			||||||
 | 
					# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
 | 
				
			||||||
 | 
					# have no effect if this option is set to NO (the default)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HAVE_DOT               = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# By default doxygen will write a font called FreeSans.ttf to the output 
 | 
				
			||||||
 | 
					# directory and reference it in all dot files that doxygen generates. This 
 | 
				
			||||||
 | 
					# font does not include all possible unicode characters however, so when you need 
 | 
				
			||||||
 | 
					# these (or just want a differently looking font) you can specify the font name 
 | 
				
			||||||
 | 
					# using DOT_FONTNAME. You need need to make sure dot is able to find the font, 
 | 
				
			||||||
 | 
					# which can be done by putting it in a standard location or by setting the 
 | 
				
			||||||
 | 
					# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 
 | 
				
			||||||
 | 
					# containing the font.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOT_FONTNAME           = FreeSans
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
 | 
				
			||||||
 | 
					# The default size is 10pt.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOT_FONTSIZE           = 10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# By default doxygen will tell dot to use the output directory to look for the 
 | 
				
			||||||
 | 
					# FreeSans.ttf font (which doxygen will put there itself). If you specify a 
 | 
				
			||||||
 | 
					# different font using DOT_FONTNAME you can set the path where dot 
 | 
				
			||||||
 | 
					# can find it using this tag.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOT_FONTPATH           = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||||
 | 
					# will generate a graph for each documented class showing the direct and 
 | 
				
			||||||
 | 
					# indirect inheritance relations. Setting this tag to YES will force the 
 | 
				
			||||||
 | 
					# the CLASS_DIAGRAMS tag to NO.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CLASS_GRAPH            = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||||
 | 
					# will generate a graph for each documented class showing the direct and 
 | 
				
			||||||
 | 
					# indirect implementation dependencies (inheritance, containment, and 
 | 
				
			||||||
 | 
					# class references variables) of the class with other documented classes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COLLABORATION_GRAPH    = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||||
 | 
					# will generate a graph for groups, showing the direct groups dependencies
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GROUP_GRAPHS           = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
 | 
				
			||||||
 | 
					# collaboration diagrams in a style similar to the OMG's Unified Modeling 
 | 
				
			||||||
 | 
					# Language.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UML_LOOK               = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If set to YES, the inheritance and collaboration graphs will show the 
 | 
				
			||||||
 | 
					# relations between templates and their instances.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TEMPLATE_RELATIONS     = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
 | 
				
			||||||
 | 
					# tags are set to YES then doxygen will generate a graph for each documented 
 | 
				
			||||||
 | 
					# file showing the direct and indirect include dependencies of the file with 
 | 
				
			||||||
 | 
					# other documented files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INCLUDE_GRAPH          = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
 | 
				
			||||||
 | 
					# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
 | 
				
			||||||
 | 
					# documented header file showing the documented files that directly or 
 | 
				
			||||||
 | 
					# indirectly include this file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INCLUDED_BY_GRAPH      = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
 | 
				
			||||||
 | 
					# doxygen will generate a call dependency graph for every global function 
 | 
				
			||||||
 | 
					# or class method. Note that enabling this option will significantly increase 
 | 
				
			||||||
 | 
					# the time of a run. So in most cases it will be better to enable call graphs 
 | 
				
			||||||
 | 
					# for selected functions only using the \callgraph command.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CALL_GRAPH             = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
 | 
				
			||||||
 | 
					# doxygen will generate a caller dependency graph for every global function 
 | 
				
			||||||
 | 
					# or class method. Note that enabling this option will significantly increase 
 | 
				
			||||||
 | 
					# the time of a run. So in most cases it will be better to enable caller 
 | 
				
			||||||
 | 
					# graphs for selected functions only using the \callergraph command.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CALLER_GRAPH           = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
 | 
				
			||||||
 | 
					# will graphical hierarchy of all classes instead of a textual one.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GRAPHICAL_HIERARCHY    = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
 | 
				
			||||||
 | 
					# then doxygen will show the dependencies a directory has on other directories 
 | 
				
			||||||
 | 
					# in a graphical way. The dependency relations are determined by the #include
 | 
				
			||||||
 | 
					# relations between the files in the directories.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DIRECTORY_GRAPH        = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
 | 
				
			||||||
 | 
					# generated by dot. Possible values are png, jpg, or gif
 | 
				
			||||||
 | 
					# If left blank png will be used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOT_IMAGE_FORMAT       = png
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The tag DOT_PATH can be used to specify the path where the dot tool can be 
 | 
				
			||||||
 | 
					# found. If left blank, it is assumed the dot tool can be found in the path.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOT_PATH               = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The DOTFILE_DIRS tag can be used to specify one or more directories that 
 | 
				
			||||||
 | 
					# contain dot files that are included in the documentation (see the 
 | 
				
			||||||
 | 
					# \dotfile command).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOTFILE_DIRS           = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
 | 
				
			||||||
 | 
					# nodes that will be shown in the graph. If the number of nodes in a graph 
 | 
				
			||||||
 | 
					# becomes larger than this value, doxygen will truncate the graph, which is 
 | 
				
			||||||
 | 
					# visualized by representing a node as a red box. Note that doxygen if the 
 | 
				
			||||||
 | 
					# number of direct children of the root node in a graph is already larger than 
 | 
				
			||||||
 | 
					# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
 | 
				
			||||||
 | 
					# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOT_GRAPH_MAX_NODES    = 15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
 | 
				
			||||||
 | 
					# graphs generated by dot. A depth value of 3 means that only nodes reachable 
 | 
				
			||||||
 | 
					# from the root by following a path via at most 3 edges will be shown. Nodes 
 | 
				
			||||||
 | 
					# that lay further from the root node will be omitted. Note that setting this 
 | 
				
			||||||
 | 
					# option to 1 or 2 may greatly reduce the computation time needed for large 
 | 
				
			||||||
 | 
					# code bases. Also note that the size of a graph can be further restricted by 
 | 
				
			||||||
 | 
					# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MAX_DOT_GRAPH_DEPTH    = 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
 | 
				
			||||||
 | 
					# background. This is disabled by default, because dot on Windows does not 
 | 
				
			||||||
 | 
					# seem to support this out of the box. Warning: Depending on the platform used, 
 | 
				
			||||||
 | 
					# enabling this option may lead to badly anti-aliased labels on the edges of 
 | 
				
			||||||
 | 
					# a graph (i.e. they become hard to read).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOT_TRANSPARENT        = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
 | 
				
			||||||
 | 
					# files in one run (i.e. multiple -o and -T options on the command line). This 
 | 
				
			||||||
 | 
					# makes dot run faster, but since only newer versions of dot (>1.8.10) 
 | 
				
			||||||
 | 
					# support this, this feature is disabled by default.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOT_MULTI_TARGETS      = NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
 | 
				
			||||||
 | 
					# generate a legend page explaining the meaning of the various boxes and 
 | 
				
			||||||
 | 
					# arrows in the dot generated graphs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERATE_LEGEND        = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
 | 
				
			||||||
 | 
					# remove the intermediate dot files that are used to generate 
 | 
				
			||||||
 | 
					# the various graphs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DOT_CLEANUP            = YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Configuration::additions related to the search engine   
 | 
				
			||||||
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The SEARCHENGINE tag specifies whether or not a search engine should be 
 | 
				
			||||||
 | 
					# used. If set to NO the values of all tags below this one will be ignored.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SEARCHENGINE           = NO
 | 
				
			||||||
@ -0,0 +1,106 @@
 | 
				
			|||||||
 | 
					;************************************************************
 | 
				
			||||||
 | 
					; Windows USB CDC ACM Setup File
 | 
				
			||||||
 | 
					; Copyright (c) 2000 Microsoft Corporation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Version]
 | 
				
			||||||
 | 
					Signature="$Windows NT$"
 | 
				
			||||||
 | 
					Class=Ports
 | 
				
			||||||
 | 
					ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
 | 
				
			||||||
 | 
					Provider=%MFGNAME%
 | 
				
			||||||
 | 
					LayoutFile=layout.inf
 | 
				
			||||||
 | 
					CatalogFile=%MFGFILENAME%.cat
 | 
				
			||||||
 | 
					DriverVer=11/15/2007,5.1.2600.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Manufacturer]
 | 
				
			||||||
 | 
					%MFGNAME%=DeviceList, NTamd64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[DestinationDirs]
 | 
				
			||||||
 | 
					DefaultDestDir=12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					;  Windows 2000/XP/Vista-32bit Sections
 | 
				
			||||||
 | 
					;------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[DriverInstall.nt]
 | 
				
			||||||
 | 
					include=mdmcpq.inf
 | 
				
			||||||
 | 
					CopyFiles=DriverCopyFiles.nt
 | 
				
			||||||
 | 
					AddReg=DriverInstall.nt.AddReg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[DriverCopyFiles.nt]
 | 
				
			||||||
 | 
					usbser.sys,,,0x20
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[DriverInstall.nt.AddReg]
 | 
				
			||||||
 | 
					HKR,,DevLoader,,*ntkern
 | 
				
			||||||
 | 
					HKR,,NTMPDriver,,%DRIVERFILENAME%.sys
 | 
				
			||||||
 | 
					HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[DriverInstall.nt.Services]
 | 
				
			||||||
 | 
					AddService=usbser, 0x00000002, DriverService.nt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[DriverService.nt]
 | 
				
			||||||
 | 
					DisplayName=%SERVICE%
 | 
				
			||||||
 | 
					ServiceType=1
 | 
				
			||||||
 | 
					StartType=3
 | 
				
			||||||
 | 
					ErrorControl=1
 | 
				
			||||||
 | 
					ServiceBinary=%12%\%DRIVERFILENAME%.sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					;  Vista-64bit Sections
 | 
				
			||||||
 | 
					;------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[DriverInstall.NTamd64]
 | 
				
			||||||
 | 
					include=mdmcpq.inf
 | 
				
			||||||
 | 
					CopyFiles=DriverCopyFiles.NTamd64
 | 
				
			||||||
 | 
					AddReg=DriverInstall.NTamd64.AddReg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[DriverCopyFiles.NTamd64]
 | 
				
			||||||
 | 
					%DRIVERFILENAME%.sys,,,0x20
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[DriverInstall.NTamd64.AddReg]
 | 
				
			||||||
 | 
					HKR,,DevLoader,,*ntkern
 | 
				
			||||||
 | 
					HKR,,NTMPDriver,,%DRIVERFILENAME%.sys
 | 
				
			||||||
 | 
					HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[DriverInstall.NTamd64.Services]
 | 
				
			||||||
 | 
					AddService=usbser, 0x00000002, DriverService.NTamd64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[DriverService.NTamd64]
 | 
				
			||||||
 | 
					DisplayName=%SERVICE%
 | 
				
			||||||
 | 
					ServiceType=1
 | 
				
			||||||
 | 
					StartType=3
 | 
				
			||||||
 | 
					ErrorControl=1
 | 
				
			||||||
 | 
					ServiceBinary=%12%\%DRIVERFILENAME%.sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					;  Vendor and Product ID Definitions
 | 
				
			||||||
 | 
					;------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					; When developing your USB device, the VID and PID used in the PC side
 | 
				
			||||||
 | 
					; application program and the firmware on the microcontroller must match.
 | 
				
			||||||
 | 
					; Modify the below line to use your VID and PID.  Use the format as shown below.
 | 
				
			||||||
 | 
					; Note: One INF file can be used for multiple devices with different VID and PIDs.
 | 
				
			||||||
 | 
					; For each supported device, append ",USB\VID_xxxx&PID_yyyy" to the end of the line.
 | 
				
			||||||
 | 
					;------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					[SourceDisksFiles]
 | 
				
			||||||
 | 
					[SourceDisksNames]
 | 
				
			||||||
 | 
					[DeviceList]
 | 
				
			||||||
 | 
					%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2062&MI_00
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[DeviceList.NTamd64]
 | 
				
			||||||
 | 
					%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2062&MI_00
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					;  String Definitions
 | 
				
			||||||
 | 
					;------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					;Modify these strings to customize your device
 | 
				
			||||||
 | 
					;------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					[Strings]
 | 
				
			||||||
 | 
					MFGFILENAME="CDC_vista"
 | 
				
			||||||
 | 
					DRIVERFILENAME ="usbser"
 | 
				
			||||||
 | 
					MFGNAME="CCS, Inc."
 | 
				
			||||||
 | 
					INSTDISK="LUFA CDC/Mouse Driver Installer"
 | 
				
			||||||
 | 
					DESCRIPTION="Communications Port"
 | 
				
			||||||
 | 
					SERVICE="USB RS-232 Emulation Driver"
 | 
				
			||||||
@ -0,0 +1,740 @@
 | 
				
			|||||||
 | 
					# Hey Emacs, this is a -*- makefile -*-
 | 
				
			||||||
 | 
					#----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
 | 
				
			||||||
 | 
					#  >> Modified for use with the LUFA project. <<
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Released to the Public Domain
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Additional material for this makefile was written by:
 | 
				
			||||||
 | 
					# Peter Fleury
 | 
				
			||||||
 | 
					# Tim Henigan
 | 
				
			||||||
 | 
					# Colin O'Flynn
 | 
				
			||||||
 | 
					# Reiner Patommel
 | 
				
			||||||
 | 
					# Markus Pfaff
 | 
				
			||||||
 | 
					# Sander Pool
 | 
				
			||||||
 | 
					# Frederik Rouleau
 | 
				
			||||||
 | 
					# Carlos Lamas
 | 
				
			||||||
 | 
					# Dean Camera
 | 
				
			||||||
 | 
					# Opendous Inc.
 | 
				
			||||||
 | 
					# Denver Gingerich
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# On command line:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make all = Make software.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make clean = Clean out built project files.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make coff = Convert ELF to AVR COFF.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make extcoff = Convert ELF to AVR Extended COFF.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make program = Download the hex file to the device, using avrdude.
 | 
				
			||||||
 | 
					#                Please customize the avrdude settings below first!
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make dfu = Download the hex file to the device, using dfu-programmer (must
 | 
				
			||||||
 | 
					#            have dfu-programmer installed).
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make flip = Download the hex file to the device, using Atmel FLIP (must
 | 
				
			||||||
 | 
					#             have Atmel FLIP installed).
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
 | 
				
			||||||
 | 
					#               (must have dfu-programmer installed).
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
 | 
				
			||||||
 | 
					#                (must have Atmel FLIP installed).
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
				
			||||||
 | 
					#                DoxyGen installed)
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
				
			||||||
 | 
					#              with avr-gdb or avr-insight as the front end for debugging.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make filename.s = Just compile filename.c into the assembler code only.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make filename.i = Create a preprocessed source file for use in submitting
 | 
				
			||||||
 | 
					#                   bug reports to the GCC project.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# To rebuild project do "make clean" then "make all".
 | 
				
			||||||
 | 
					#----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MCU name
 | 
				
			||||||
 | 
					MCU = at90usb1287
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Target board (see library "Board Types" documentation, USER or blank for projects not requiring
 | 
				
			||||||
 | 
					# LUFA board drivers). If USER is selected, put custom board drivers in a directory called 
 | 
				
			||||||
 | 
					# "Board" inside the application directory.
 | 
				
			||||||
 | 
					BOARD  = USBKEY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Processor frequency.
 | 
				
			||||||
 | 
					#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
				
			||||||
 | 
					#     processor frequency in Hz. You can then use this symbol in your source code to 
 | 
				
			||||||
 | 
					#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
				
			||||||
 | 
					#     automatically to create a 32-bit value in your source code.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     This will be an integer division of F_CLOCK below, as it is sourced by
 | 
				
			||||||
 | 
					#     F_CLOCK after it has run through any CPU prescalers. Note that this value
 | 
				
			||||||
 | 
					#     does not *change* the processor frequency - it should merely be updated to
 | 
				
			||||||
 | 
					#     reflect the processor speed set externally so that the code can use accurate
 | 
				
			||||||
 | 
					#     software delays.
 | 
				
			||||||
 | 
					F_CPU = 8000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Input clock frequency.
 | 
				
			||||||
 | 
					#     This will define a symbol, F_CLOCK, in all source code files equal to the 
 | 
				
			||||||
 | 
					#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
				
			||||||
 | 
					#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
				
			||||||
 | 
					#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
				
			||||||
 | 
					#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
 | 
				
			||||||
 | 
					#     at the end, this will be done automatically to create a 32-bit value in your
 | 
				
			||||||
 | 
					#     source code.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     If no clock division is performed on the input clock inside the AVR (via the
 | 
				
			||||||
 | 
					#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
 | 
				
			||||||
 | 
					F_CLOCK = $(F_CPU)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Output format. (can be srec, ihex, binary)
 | 
				
			||||||
 | 
					FORMAT = ihex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Target file name (without extension).
 | 
				
			||||||
 | 
					TARGET = CDCMouse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Object files directory
 | 
				
			||||||
 | 
					#     To put object files in current directory, use a dot (.), do NOT make
 | 
				
			||||||
 | 
					#     this an empty or blank macro!
 | 
				
			||||||
 | 
					OBJDIR = .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Path to the LUFA library
 | 
				
			||||||
 | 
					LUFA_PATH = ../../../..
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# LUFA library compile-time options
 | 
				
			||||||
 | 
					LUFA_OPTS  = -D USB_DEVICE_ONLY
 | 
				
			||||||
 | 
					LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
 | 
				
			||||||
 | 
					LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
 | 
				
			||||||
 | 
					LUFA_OPTS += -D USE_FLASH_DESCRIPTORS
 | 
				
			||||||
 | 
					LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# List C source files here. (C dependencies are automatically generated.)
 | 
				
			||||||
 | 
					SRC = $(TARGET).c                                                 \
 | 
				
			||||||
 | 
						  Descriptors.c                                               \
 | 
				
			||||||
 | 
						  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \
 | 
				
			||||||
 | 
						  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \
 | 
				
			||||||
 | 
						  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \
 | 
				
			||||||
 | 
						  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \
 | 
				
			||||||
 | 
						  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \
 | 
				
			||||||
 | 
					 	  $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \
 | 
				
			||||||
 | 
						  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \
 | 
				
			||||||
 | 
						  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \
 | 
				
			||||||
 | 
						  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \
 | 
				
			||||||
 | 
						  $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \
 | 
				
			||||||
 | 
						  $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c            \
 | 
				
			||||||
 | 
						  $(LUFA_PATH)/LUFA/Drivers/USB/Class/Host/CDC.c              \
 | 
				
			||||||
 | 
						  $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c            \
 | 
				
			||||||
 | 
						  $(LUFA_PATH)/LUFA/Drivers/USB/Class/Host/HID.c              \
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# List C++ source files here. (C dependencies are automatically generated.)
 | 
				
			||||||
 | 
					CPPSRC = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# List Assembler source files here.
 | 
				
			||||||
 | 
					#     Make them always end in a capital .S.  Files ending in a lowercase .s
 | 
				
			||||||
 | 
					#     will not be considered source files but generated files (assembler
 | 
				
			||||||
 | 
					#     output from the compiler), and will be deleted upon "make clean"!
 | 
				
			||||||
 | 
					#     Even though the DOS/Win* filesystem matches both .s and .S the same,
 | 
				
			||||||
 | 
					#     it will preserve the spelling of the filenames, and gcc itself does
 | 
				
			||||||
 | 
					#     care about how the name is spelled on its command-line.
 | 
				
			||||||
 | 
					ASRC =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
				
			||||||
 | 
					#     0 = turn off optimization. s = optimize for size.
 | 
				
			||||||
 | 
					#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
				
			||||||
 | 
					OPT = s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Debugging format.
 | 
				
			||||||
 | 
					#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
 | 
				
			||||||
 | 
					#     AVR Studio 4.10 requires dwarf-2.
 | 
				
			||||||
 | 
					#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
 | 
				
			||||||
 | 
					DEBUG = dwarf-2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# List any extra directories to look for include files here.
 | 
				
			||||||
 | 
					#     Each directory must be seperated by a space.
 | 
				
			||||||
 | 
					#     Use forward slashes for directory separators.
 | 
				
			||||||
 | 
					#     For a directory that has spaces, enclose it in quotes.
 | 
				
			||||||
 | 
					EXTRAINCDIRS = $(LUFA_PATH)/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compiler flag to set the C Standard level.
 | 
				
			||||||
 | 
					#     c89   = "ANSI" C
 | 
				
			||||||
 | 
					#     gnu89 = c89 plus GCC extensions
 | 
				
			||||||
 | 
					#     c99   = ISO C99 standard (not yet fully implemented)
 | 
				
			||||||
 | 
					#     gnu99 = c99 plus GCC extensions
 | 
				
			||||||
 | 
					CSTANDARD = -std=gnu99
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Place -D or -U options here for C sources
 | 
				
			||||||
 | 
					CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD) $(LUFA_OPTS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Place -D or -U options here for ASM sources
 | 
				
			||||||
 | 
					ADEFS = -DF_CPU=$(F_CPU)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Place -D or -U options here for C++ sources
 | 
				
			||||||
 | 
					CPPDEFS = -DF_CPU=$(F_CPU)UL
 | 
				
			||||||
 | 
					#CPPDEFS += -D__STDC_LIMIT_MACROS
 | 
				
			||||||
 | 
					#CPPDEFS += -D__STDC_CONSTANT_MACROS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------- Compiler Options C ----------------
 | 
				
			||||||
 | 
					#  -g*:          generate debugging information
 | 
				
			||||||
 | 
					#  -O*:          optimization level
 | 
				
			||||||
 | 
					#  -f...:        tuning, see GCC manual and avr-libc documentation
 | 
				
			||||||
 | 
					#  -Wall...:     warning level
 | 
				
			||||||
 | 
					#  -Wa,...:      tell GCC to pass this to the assembler.
 | 
				
			||||||
 | 
					#    -adhlns...: create assembler listing
 | 
				
			||||||
 | 
					CFLAGS = -g$(DEBUG)
 | 
				
			||||||
 | 
					CFLAGS += $(CDEFS)
 | 
				
			||||||
 | 
					CFLAGS += -O$(OPT)
 | 
				
			||||||
 | 
					CFLAGS += -funsigned-char
 | 
				
			||||||
 | 
					CFLAGS += -funsigned-bitfields
 | 
				
			||||||
 | 
					CFLAGS += -ffunction-sections
 | 
				
			||||||
 | 
					CFLAGS += -fno-inline-small-functions
 | 
				
			||||||
 | 
					CFLAGS += -fpack-struct
 | 
				
			||||||
 | 
					CFLAGS += -fshort-enums
 | 
				
			||||||
 | 
					CFLAGS += -Wall
 | 
				
			||||||
 | 
					CFLAGS += -Wstrict-prototypes
 | 
				
			||||||
 | 
					CFLAGS += -Wundef
 | 
				
			||||||
 | 
					#CFLAGS += -fno-unit-at-a-time
 | 
				
			||||||
 | 
					#CFLAGS += -Wunreachable-code
 | 
				
			||||||
 | 
					#CFLAGS += -Wsign-compare
 | 
				
			||||||
 | 
					CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
 | 
				
			||||||
 | 
					CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
				
			||||||
 | 
					CFLAGS += $(CSTANDARD)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------- Compiler Options C++ ----------------
 | 
				
			||||||
 | 
					#  -g*:          generate debugging information
 | 
				
			||||||
 | 
					#  -O*:          optimization level
 | 
				
			||||||
 | 
					#  -f...:        tuning, see GCC manual and avr-libc documentation
 | 
				
			||||||
 | 
					#  -Wall...:     warning level
 | 
				
			||||||
 | 
					#  -Wa,...:      tell GCC to pass this to the assembler.
 | 
				
			||||||
 | 
					#    -adhlns...: create assembler listing
 | 
				
			||||||
 | 
					CPPFLAGS = -g$(DEBUG)
 | 
				
			||||||
 | 
					CPPFLAGS += $(CPPDEFS)
 | 
				
			||||||
 | 
					CPPFLAGS += -O$(OPT)
 | 
				
			||||||
 | 
					CPPFLAGS += -funsigned-char
 | 
				
			||||||
 | 
					CPPFLAGS += -funsigned-bitfields
 | 
				
			||||||
 | 
					CPPFLAGS += -fpack-struct
 | 
				
			||||||
 | 
					CPPFLAGS += -fshort-enums
 | 
				
			||||||
 | 
					CPPFLAGS += -fno-exceptions
 | 
				
			||||||
 | 
					CPPFLAGS += -Wall
 | 
				
			||||||
 | 
					CFLAGS += -Wundef
 | 
				
			||||||
 | 
					#CPPFLAGS += -mshort-calls
 | 
				
			||||||
 | 
					#CPPFLAGS += -fno-unit-at-a-time
 | 
				
			||||||
 | 
					#CPPFLAGS += -Wstrict-prototypes
 | 
				
			||||||
 | 
					#CPPFLAGS += -Wunreachable-code
 | 
				
			||||||
 | 
					#CPPFLAGS += -Wsign-compare
 | 
				
			||||||
 | 
					CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
 | 
				
			||||||
 | 
					CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
				
			||||||
 | 
					#CPPFLAGS += $(CSTANDARD)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------- Assembler Options ----------------
 | 
				
			||||||
 | 
					#  -Wa,...:   tell GCC to pass this to the assembler.
 | 
				
			||||||
 | 
					#  -adhlns:   create listing
 | 
				
			||||||
 | 
					#  -gstabs:   have the assembler create line number information; note that
 | 
				
			||||||
 | 
					#             for use in COFF files, additional information about filenames
 | 
				
			||||||
 | 
					#             and function names needs to be present in the assembler source
 | 
				
			||||||
 | 
					#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
				
			||||||
 | 
					#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
				
			||||||
 | 
					#       dump that will be displayed for a given single line of source input.
 | 
				
			||||||
 | 
					ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------- Library Options ----------------
 | 
				
			||||||
 | 
					# Minimalistic printf version
 | 
				
			||||||
 | 
					PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Floating point printf version (requires MATH_LIB = -lm below)
 | 
				
			||||||
 | 
					PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If this is left blank, then it will use the Standard printf version.
 | 
				
			||||||
 | 
					PRINTF_LIB = 
 | 
				
			||||||
 | 
					#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
				
			||||||
 | 
					#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Minimalistic scanf version
 | 
				
			||||||
 | 
					SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
 | 
				
			||||||
 | 
					SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If this is left blank, then it will use the Standard scanf version.
 | 
				
			||||||
 | 
					SCANF_LIB = 
 | 
				
			||||||
 | 
					#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
				
			||||||
 | 
					#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MATH_LIB = -lm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# List any extra directories to look for libraries here.
 | 
				
			||||||
 | 
					#     Each directory must be seperated by a space.
 | 
				
			||||||
 | 
					#     Use forward slashes for directory separators.
 | 
				
			||||||
 | 
					#     For a directory that has spaces, enclose it in quotes.
 | 
				
			||||||
 | 
					EXTRALIBDIRS = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------- External Memory Options ----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 64 KB of external RAM, starting after internal RAM (ATmega128!),
 | 
				
			||||||
 | 
					# used for variables (.data/.bss) and heap (malloc()).
 | 
				
			||||||
 | 
					#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 64 KB of external RAM, starting after internal RAM (ATmega128!),
 | 
				
			||||||
 | 
					# only used for heap (malloc()).
 | 
				
			||||||
 | 
					#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXTMEMOPTS =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------- Linker Options ----------------
 | 
				
			||||||
 | 
					#  -Wl,...:     tell GCC to pass this to linker.
 | 
				
			||||||
 | 
					#    -Map:      create map file
 | 
				
			||||||
 | 
					#    --cref:    add cross reference to  map file
 | 
				
			||||||
 | 
					LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 | 
				
			||||||
 | 
					LDFLAGS += -Wl,--relax 
 | 
				
			||||||
 | 
					LDFLAGS += -Wl,--gc-sections
 | 
				
			||||||
 | 
					LDFLAGS += $(EXTMEMOPTS)
 | 
				
			||||||
 | 
					LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
				
			||||||
 | 
					LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
 | 
				
			||||||
 | 
					#LDFLAGS += -T linker_script.x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------- Programming Options (avrdude) ----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Programming hardware: alf avr910 avrisp bascom bsd 
 | 
				
			||||||
 | 
					# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Type: avrdude -c ?
 | 
				
			||||||
 | 
					# to get a full listing.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					AVRDUDE_PROGRAMMER = jtagmkII
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# com1 = serial port. Use lpt1 to connect to parallel port.
 | 
				
			||||||
 | 
					AVRDUDE_PORT = usb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
				
			||||||
 | 
					#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Uncomment the following if you want avrdude's erase cycle counter.
 | 
				
			||||||
 | 
					# Note that this counter needs to be initialized first using -Yn,
 | 
				
			||||||
 | 
					# see avrdude manual.
 | 
				
			||||||
 | 
					#AVRDUDE_ERASE_COUNTER = -y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Uncomment the following if you do /not/ wish a verification to be
 | 
				
			||||||
 | 
					# performed after programming the device.
 | 
				
			||||||
 | 
					#AVRDUDE_NO_VERIFY = -V
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Increase verbosity level.  Please use this when submitting bug
 | 
				
			||||||
 | 
					# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
				
			||||||
 | 
					# to submit bug reports.
 | 
				
			||||||
 | 
					#AVRDUDE_VERBOSE = -v -v
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 | 
				
			||||||
 | 
					AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
 | 
				
			||||||
 | 
					AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
 | 
				
			||||||
 | 
					AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------- Debugging Options ----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# For simulavr only - target MCU frequency.
 | 
				
			||||||
 | 
					DEBUG_MFREQ = $(F_CPU)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the DEBUG_UI to either gdb or insight.
 | 
				
			||||||
 | 
					# DEBUG_UI = gdb
 | 
				
			||||||
 | 
					DEBUG_UI = insight
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the debugging back-end to either avarice, simulavr.
 | 
				
			||||||
 | 
					DEBUG_BACKEND = avarice
 | 
				
			||||||
 | 
					#DEBUG_BACKEND = simulavr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# GDB Init Filename.
 | 
				
			||||||
 | 
					GDBINIT_FILE = __avr_gdbinit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# When using avarice settings for the JTAG
 | 
				
			||||||
 | 
					JTAG_DEV = /dev/com1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Debugging port used to communicate between GDB / avarice / simulavr.
 | 
				
			||||||
 | 
					DEBUG_PORT = 4242
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
				
			||||||
 | 
					#     just set to localhost unless doing some sort of crazy debugging when 
 | 
				
			||||||
 | 
					#     avarice is running on a different computer.
 | 
				
			||||||
 | 
					DEBUG_HOST = localhost
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define programs and commands.
 | 
				
			||||||
 | 
					SHELL = sh
 | 
				
			||||||
 | 
					CC = avr-gcc
 | 
				
			||||||
 | 
					OBJCOPY = avr-objcopy
 | 
				
			||||||
 | 
					OBJDUMP = avr-objdump
 | 
				
			||||||
 | 
					SIZE = avr-size
 | 
				
			||||||
 | 
					AR = avr-ar rcs
 | 
				
			||||||
 | 
					NM = avr-nm
 | 
				
			||||||
 | 
					AVRDUDE = avrdude
 | 
				
			||||||
 | 
					REMOVE = rm -f
 | 
				
			||||||
 | 
					REMOVEDIR = rm -rf
 | 
				
			||||||
 | 
					COPY = cp
 | 
				
			||||||
 | 
					WINSHELL = cmd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define Messages
 | 
				
			||||||
 | 
					# English
 | 
				
			||||||
 | 
					MSG_ERRORS_NONE = Errors: none
 | 
				
			||||||
 | 
					MSG_BEGIN = -------- begin --------
 | 
				
			||||||
 | 
					MSG_END = --------  end  --------
 | 
				
			||||||
 | 
					MSG_SIZE_BEFORE = Size before: 
 | 
				
			||||||
 | 
					MSG_SIZE_AFTER = Size after:
 | 
				
			||||||
 | 
					MSG_COFF = Converting to AVR COFF:
 | 
				
			||||||
 | 
					MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
				
			||||||
 | 
					MSG_FLASH = Creating load file for Flash:
 | 
				
			||||||
 | 
					MSG_EEPROM = Creating load file for EEPROM:
 | 
				
			||||||
 | 
					MSG_EXTENDED_LISTING = Creating Extended Listing:
 | 
				
			||||||
 | 
					MSG_SYMBOL_TABLE = Creating Symbol Table:
 | 
				
			||||||
 | 
					MSG_LINKING = Linking:
 | 
				
			||||||
 | 
					MSG_COMPILING = Compiling C:
 | 
				
			||||||
 | 
					MSG_COMPILING_CPP = Compiling C++:
 | 
				
			||||||
 | 
					MSG_ASSEMBLING = Assembling:
 | 
				
			||||||
 | 
					MSG_CLEANING = Cleaning project:
 | 
				
			||||||
 | 
					MSG_CREATING_LIBRARY = Creating library:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define all object files.
 | 
				
			||||||
 | 
					OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define all listing files.
 | 
				
			||||||
 | 
					LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compiler flags to generate dependency files.
 | 
				
			||||||
 | 
					GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Combine all necessary flags and optional flags.
 | 
				
			||||||
 | 
					# Add target processor to flags.
 | 
				
			||||||
 | 
					ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
 | 
				
			||||||
 | 
					ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
 | 
				
			||||||
 | 
					ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Default target.
 | 
				
			||||||
 | 
					all: begin gccversion sizebefore build checkinvalidevents showliboptions showtarget sizeafter end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Change the build target to build a HEX file or a library.
 | 
				
			||||||
 | 
					build: elf hex eep lss sym
 | 
				
			||||||
 | 
					#build: lib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					elf: $(TARGET).elf
 | 
				
			||||||
 | 
					hex: $(TARGET).hex
 | 
				
			||||||
 | 
					eep: $(TARGET).eep
 | 
				
			||||||
 | 
					lss: $(TARGET).lss
 | 
				
			||||||
 | 
					sym: $(TARGET).sym
 | 
				
			||||||
 | 
					LIBNAME=lib$(TARGET).a
 | 
				
			||||||
 | 
					lib: $(LIBNAME)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Eye candy.
 | 
				
			||||||
 | 
					# AVR Studio 3.x does not check make's exit code but relies on
 | 
				
			||||||
 | 
					# the following magic strings to be generated by the compile job.
 | 
				
			||||||
 | 
					begin:
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo $(MSG_BEGIN)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end:
 | 
				
			||||||
 | 
						@echo $(MSG_END)
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Display size of file.
 | 
				
			||||||
 | 
					HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
 | 
				
			||||||
 | 
					ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf
 | 
				
			||||||
 | 
					MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )
 | 
				
			||||||
 | 
					FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sizebefore:
 | 
				
			||||||
 | 
						@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
 | 
				
			||||||
 | 
						2>/dev/null; echo; fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sizeafter:
 | 
				
			||||||
 | 
						@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
 | 
				
			||||||
 | 
						2>/dev/null; echo; fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(LUFA_PATH)/LUFA/LUFA_Events.lst:
 | 
				
			||||||
 | 
						@make -C $(LUFA_PATH)/LUFA/ LUFA_Events.lst
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					checkinvalidevents: $(LUFA_PATH)/LUFA/LUFA_Events.lst
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo Checking for invalid events...
 | 
				
			||||||
 | 
						@$(shell) avr-nm $(OBJ) | sed -n -e 's/^.*EVENT_/EVENT_/p' | \
 | 
				
			||||||
 | 
						                 grep -F -v --file=$(LUFA_PATH)/LUFA/LUFA_Events.lst > InvalidEvents.tmp || true
 | 
				
			||||||
 | 
						@sed -n -e 's/^/  WARNING - INVALID EVENT NAME: /p' InvalidEvents.tmp
 | 
				
			||||||
 | 
						@if test -s InvalidEvents.tmp; then exit 1; fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					showliboptions:
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo ---- Compile Time Library Options ----
 | 
				
			||||||
 | 
						@for i in $(LUFA_OPTS:-D%=%); do \
 | 
				
			||||||
 | 
							echo $$i; \
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
						@echo --------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					showtarget:
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo --------- Target Information ---------
 | 
				
			||||||
 | 
						@echo AVR Model: $(MCU)
 | 
				
			||||||
 | 
						@echo Board:     $(BOARD)
 | 
				
			||||||
 | 
						@echo Clock:     $(F_CPU)Hz CPU, $(F_CLOCK)Hz Master
 | 
				
			||||||
 | 
						@echo --------------------------------------
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Display compiler version information.
 | 
				
			||||||
 | 
					gccversion : 
 | 
				
			||||||
 | 
						@$(CC) --version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Program the device.  
 | 
				
			||||||
 | 
					program: $(TARGET).hex $(TARGET).eep
 | 
				
			||||||
 | 
						$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					flip: $(TARGET).hex
 | 
				
			||||||
 | 
						batchisp -hardware usb -device $(MCU) -operation erase f
 | 
				
			||||||
 | 
						batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program
 | 
				
			||||||
 | 
						batchisp -hardware usb -device $(MCU) -operation start reset 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dfu: $(TARGET).hex
 | 
				
			||||||
 | 
						dfu-programmer $(MCU) erase
 | 
				
			||||||
 | 
						dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex
 | 
				
			||||||
 | 
						dfu-programmer $(MCU) reset
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					flip-ee: $(TARGET).hex $(TARGET).eep
 | 
				
			||||||
 | 
						$(COPY) $(TARGET).eep $(TARGET)eep.hex
 | 
				
			||||||
 | 
						batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase
 | 
				
			||||||
 | 
						batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program
 | 
				
			||||||
 | 
						batchisp -hardware usb -device $(MCU) -operation start reset 0
 | 
				
			||||||
 | 
						$(REMOVE) $(TARGET)eep.hex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
				
			||||||
 | 
						dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep
 | 
				
			||||||
 | 
						dfu-programmer $(MCU) reset
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Generate avr-gdb config/init file which does the following:
 | 
				
			||||||
 | 
					#     define the reset signal, load the target file, connect to target, and set 
 | 
				
			||||||
 | 
					#     a breakpoint at main().
 | 
				
			||||||
 | 
					gdb-config: 
 | 
				
			||||||
 | 
						@$(REMOVE) $(GDBINIT_FILE)
 | 
				
			||||||
 | 
						@echo define reset >> $(GDBINIT_FILE)
 | 
				
			||||||
 | 
						@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
				
			||||||
 | 
						@echo end >> $(GDBINIT_FILE)
 | 
				
			||||||
 | 
						@echo file $(TARGET).elf >> $(GDBINIT_FILE)
 | 
				
			||||||
 | 
						@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
 | 
				
			||||||
 | 
					ifeq ($(DEBUG_BACKEND),simulavr)
 | 
				
			||||||
 | 
						@echo load  >> $(GDBINIT_FILE)
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
						@echo break main >> $(GDBINIT_FILE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					debug: gdb-config $(TARGET).elf
 | 
				
			||||||
 | 
					ifeq ($(DEBUG_BACKEND), avarice)
 | 
				
			||||||
 | 
						@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
 | 
				
			||||||
 | 
						@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
 | 
				
			||||||
 | 
						$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
 | 
				
			||||||
 | 
						@$(WINSHELL) /c pause
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
						@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
 | 
				
			||||||
 | 
						$(DEBUG_MFREQ) --port $(DEBUG_PORT)
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
						@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
 | 
				
			||||||
 | 
					COFFCONVERT = $(OBJCOPY) --debugging
 | 
				
			||||||
 | 
					COFFCONVERT += --change-section-address .data-0x800000
 | 
				
			||||||
 | 
					COFFCONVERT += --change-section-address .bss-0x800000
 | 
				
			||||||
 | 
					COFFCONVERT += --change-section-address .noinit-0x800000
 | 
				
			||||||
 | 
					COFFCONVERT += --change-section-address .eeprom-0x810000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					coff: $(TARGET).elf
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo $(MSG_COFF) $(TARGET).cof
 | 
				
			||||||
 | 
						$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extcoff: $(TARGET).elf
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
 | 
				
			||||||
 | 
						$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create final output files (.hex, .eep) from ELF output file.
 | 
				
			||||||
 | 
					%.hex: %.elf
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo $(MSG_FLASH) $@
 | 
				
			||||||
 | 
						$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%.eep: %.elf
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo $(MSG_EEPROM) $@
 | 
				
			||||||
 | 
						-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
 | 
				
			||||||
 | 
						--change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create extended listing file from ELF output file.
 | 
				
			||||||
 | 
					%.lss: %.elf
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo $(MSG_EXTENDED_LISTING) $@
 | 
				
			||||||
 | 
						$(OBJDUMP) -h -z -S $< > $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create a symbol table from ELF output file.
 | 
				
			||||||
 | 
					%.sym: %.elf
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo $(MSG_SYMBOL_TABLE) $@
 | 
				
			||||||
 | 
						$(NM) -n $< > $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create library from object files.
 | 
				
			||||||
 | 
					.SECONDARY : $(TARGET).a
 | 
				
			||||||
 | 
					.PRECIOUS : $(OBJ)
 | 
				
			||||||
 | 
					%.a: $(OBJ)
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo $(MSG_CREATING_LIBRARY) $@
 | 
				
			||||||
 | 
						$(AR) $@ $(OBJ)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Link: create ELF output file from object files.
 | 
				
			||||||
 | 
					.SECONDARY : $(TARGET).elf
 | 
				
			||||||
 | 
					.PRECIOUS : $(OBJ)
 | 
				
			||||||
 | 
					%.elf: $(OBJ)
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo $(MSG_LINKING) $@
 | 
				
			||||||
 | 
						$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compile: create object files from C source files.
 | 
				
			||||||
 | 
					$(OBJDIR)/%.o : %.c
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo $(MSG_COMPILING) $<
 | 
				
			||||||
 | 
						$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compile: create object files from C++ source files.
 | 
				
			||||||
 | 
					$(OBJDIR)/%.o : %.cpp
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo $(MSG_COMPILING_CPP) $<
 | 
				
			||||||
 | 
						$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compile: create assembler files from C source files.
 | 
				
			||||||
 | 
					%.s : %.c
 | 
				
			||||||
 | 
						$(CC) -S $(ALL_CFLAGS) $< -o $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compile: create assembler files from C++ source files.
 | 
				
			||||||
 | 
					%.s : %.cpp
 | 
				
			||||||
 | 
						$(CC) -S $(ALL_CPPFLAGS) $< -o $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Assemble: create object files from assembler source files.
 | 
				
			||||||
 | 
					$(OBJDIR)/%.o : %.S
 | 
				
			||||||
 | 
						@echo
 | 
				
			||||||
 | 
						@echo $(MSG_ASSEMBLING) $<
 | 
				
			||||||
 | 
						$(CC) -c $(ALL_ASFLAGS) $< -o $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create preprocessed source for use in sending a bug report.
 | 
				
			||||||
 | 
					%.i : %.c
 | 
				
			||||||
 | 
						$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Target: clean project.
 | 
				
			||||||
 | 
					clean: begin clean_list clean_binary end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean_binary:
 | 
				
			||||||
 | 
						$(REMOVE) $(TARGET).hex
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					clean_list:
 | 
				
			||||||
 | 
						@echo $(MSG_CLEANING)
 | 
				
			||||||
 | 
						$(REMOVE) $(TARGET).eep
 | 
				
			||||||
 | 
						$(REMOVE) $(TARGET)eep.hex
 | 
				
			||||||
 | 
						$(REMOVE) $(TARGET).cof
 | 
				
			||||||
 | 
						$(REMOVE) $(TARGET).elf
 | 
				
			||||||
 | 
						$(REMOVE) $(TARGET).map
 | 
				
			||||||
 | 
						$(REMOVE) $(TARGET).sym
 | 
				
			||||||
 | 
						$(REMOVE) $(TARGET).lss
 | 
				
			||||||
 | 
						$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
 | 
				
			||||||
 | 
						$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)
 | 
				
			||||||
 | 
						$(REMOVE) $(SRC:.c=.s)
 | 
				
			||||||
 | 
						$(REMOVE) $(SRC:.c=.d)
 | 
				
			||||||
 | 
						$(REMOVE) $(SRC:.c=.i)
 | 
				
			||||||
 | 
						$(REMOVE) InvalidEvents.tmp
 | 
				
			||||||
 | 
						$(REMOVEDIR) .dep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					doxygen:
 | 
				
			||||||
 | 
						@echo Generating Project Documentation...
 | 
				
			||||||
 | 
						@doxygen Doxygen.conf
 | 
				
			||||||
 | 
						@echo Documentation Generation Complete.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean_doxygen:
 | 
				
			||||||
 | 
						rm -rf Documentation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create object files directory
 | 
				
			||||||
 | 
					$(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Include the dependency files.
 | 
				
			||||||
 | 
					-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Listing of phony targets.
 | 
				
			||||||
 | 
					.PHONY : all checkinvalidevents showliboptions    \
 | 
				
			||||||
 | 
					showtarget begin finish end sizebefore sizeafter  \
 | 
				
			||||||
 | 
					gccversion build elf hex eep lss sym coff extcoff \
 | 
				
			||||||
 | 
					program dfu flip flip-ee dfu-ee clean debug       \
 | 
				
			||||||
 | 
					clean_list clean_binary gdb-config doxygen
 | 
				
			||||||
											
												
													File diff suppressed because one or more lines are too long
												
											
										
									
								
					Loading…
					
					
				
		Reference in new issue